Function F_NUMERIC_TO_BASE_N converts an input numeric(32,0) value, @Number, to a string of digits in number base @Base, where @Base is between 2 and 36.It is sometimes useful to convert a number to a non-base 10 string. For example, you might want to convert a number to base 36 to compress a long number into fewer characters; the number 2147483647 would become ZIK0ZJ in base 36.The following script creates function F_NUMERIC_TO_BASE_N, and then runs code to test it with various values.if objectproperty(object_id('dbo.F_NUMERIC_TO_BASE_N'),'IsScalarFunction') = 1 begin print 'Drop function dbo.F_NUMERIC_TO_BASE_N' drop function dbo.F_NUMERIC_TO_BASE_N endgocreate function dbo.F_NUMERIC_TO_BASE_N ( @Number numeric(32,0), @Base int )returns varchar(110)as/*Function: F_NUMERIC_TO_BASE_N Function F_NUMERIC_TO_BASE_N converts a numeric(32,0) value, @Number, to a string of digits in number base @Base, where @Base is between 2 and 36. Output digits greater than 9 are represented by uppercase letters A through Z, where A = 10 through Z = 35. If input parameter @Number is negative, the output string will have a minus sign in the leftmost position. Any non-null numeric(32,0) value for parameter @Number is valid: -99999999999999999999999999999999 through 99999999999999999999999999999999. If input parameters @Number or @Base are null, or @Base is not between 2 and 36, then the function returns a null value.*/begindeclare @Work_Number numeric(38,0)declare @Modulus intdeclare @Digits varchar(36)declare @Output_String varchar(110)if @Number is null or @Base is null or @Base < 2 or @Base > 36 begin return null endset @Digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'set @Output_String = ''set @Work_Number = @Numberwhile 1=1 begin Set @Modulus = convert(int,abs(@Work_Number-(round(@Work_Number/@Base,0,1)*@Base))) set @Output_String = substring(@Digits,@Modulus+1,1) + @Output_String set @Work_Number = round(@Work_Number/@Base,0,1) if @Work_Number = 0 break end -- end whileif @Number < 0 set @Output_String = '-'+@Output_Stringreturn @Output_Stringendgoprint ''print 'Run Test of dbo.F_NUMERIC_TO_BASE_N with various values'print ''select a.number, b.base, dbo.F_NUMERIC_TO_BASE_N ( a.number, b.base )from ( -- Test values for numbers to be conveted to strings select number = convert(numeric(32,0),-99999999999999999999999999999999) union all select number = convert(numeric(32,0), 99999999999999999999999999999999) union all select number = convert(numeric(32,0), 523949341234234) union all select number = convert(numeric(32,0), 74094949349234923) union all select number = convert(numeric(32,0), null) union all select number = convert(numeric(32,0), -1) union all select number = convert(numeric(32,0), 0) union all select number = convert(numeric(32,0), 36 ) union all select number = convert(numeric(32,0), 1679615 ) union all select number = convert(numeric(32,0), 60466175 ) union all select number = convert(numeric(32,0), 2147483647 ) union all select number = convert(numeric(32,0), -9223372036854775807 ) union all select number = convert(numeric(32,0), -9223372036854775808 ) union all select number = convert(numeric(32,0), 1) ) a cross join ( -- Test values for all possible valid bases, and some invalid bases select base = null union all select base = 1 union all select base = 2 union all select base = 3 union all select base = 4 union all select base = 5 union all select base = 6 union all select base = 7 union all select base = 8 union all select base = 9 union all select base = 10 union all select base = 11 union all select base = 12 union all select base = 13 union all select base = 14 union all select base = 15 union all select base = 16 union all select base = 17 union all select base = 18 union all select base = 19 union all select base = 20 union all select base = 21 union all select base = 22 union all select base = 23 union all select base = 24 union all select base = 25 union all select base = 26 union all select base = 27 union all select base = 28 union all select base = 29 union all select base = 30 union all select base = 31 union all select base = 32 union all select base = 33 union all select base = 34 union all select base = 35 union all select base = 36 union all select base = 37 ) border by a.number, b.base
CODO ERGO SUM