SQL Server的函數是非常實用的功能,簡單的有自帶的Convert等類型轉換的函數,如果需要複雜點的功能則需要用戶自定義函數。
自定義函數又分爲表值函數、標量函數等,其中標量函數是比較常用的,可以完成一些數據格式的轉換。表值函數返回一張表,可以結合存儲過程或單獨使用。這裏拍磚引玉,貼兩段實用功能的標量函數作爲參考。
一、字符串填充
create function [dbo].[PadLeft](@OriginalString varchar (20), @PaddingChar char (1), @TotalLength int) Returns Varchar (24) As Begin Declare @NewString varchar ( 24 ) Select @NewString = IsNull ( Replicate ( @PaddingChar , @TotalLength - Len ( isnull ( @OriginalString , 0 ))), '' ) + @OriginalString Return @NewString End
調用方式:
select dbo.PadLeft('101', '0', 10) --1010000000
二、字符串轉16進制
create FUNCTION [dbo].[VarCharToHex] ( -- Add the parameters for the function here @Str varchar(400) ) RETURNS varchar(800) AS BEGIN declare @i int, @Asi int, @Mods int, @res varchar(800), @Len int, @Cres varchar(4), @tempStr varbinary(400) select @i = 1, @res = '', @Len = DATALENGTH(@Str), @tempStr = CONVERT(varbinary,@Str) while @i<=@Len begin select @Asi = SUBSTRING(@tempStr,1,1), @Cres='' while @Asi<>0 begin select @Mods = @Asi % 16, @Cres = case when (@Mods > 9) then char(ASCII('A')+@Mods - 10)+@Cres else CAST(@Mods AS varchar(4)) + @Cres end, @Asi = @Asi /16; end; select @res = @res + @Cres, @tempStr = SUBSTRING(@tempStr,2,@Len - 1), @i = @i + 1 end; return @res; END
調用方式:
select [dbo].[VarCharToHex]('00001375') --3030303031333735