You are on page 1of 1

new 2 Thursday, July 08, 2010 1:28 AM

USE [AdventureWorks]
GO

IF EXISTS
(
SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[fn_decToBase]')
AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')
)
DROP FUNCTION [dbo].[fn_decToBase]
Go
Create function [dbo].[fn_decToBase]
(
@val as BigInt,
@base as int
)
returns varchar(63)
as
Begin
/* kiểm tra hệ sơ số chuyển đổi có hợp lý hay không */
If (@val<0) OR (@base < 2) OR (@base> 36) Return Null;

/* biến lưu trữ kết quả cuối cùng */


Declare @answer as varchar(63);

/* alldigits sẽ lưu trữ tất cả các ký tự có thể xuất hiện trong 1 hệ cơ số


*/
Declare @alldigits as varchar(36);
Set @alldigits='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'

/* thiết lập giá trị ban đầu cho answer là rỗng


*/
Set @answer='';

/* chúng ta lặp cho tới khi giá trị của biến nguồn < 0*/
While @val>0
Begin
/*dựa vào hệ cơ số mà chúng ta thực hiện việc substring tại vị trí tương ứng*/
Set @answer=Substring(@alldigits,@val % @base + 1,1) + @answer;
Set @val = @val / @base;
End

/* trả về kết quả chuyển đổi */


return @answer;
End

-1-

You might also like