SQL Server標量函數例子

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章