Loading

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

 

posted @ 2022-12-27 14:51  guwei4037  阅读(105)  评论(0编辑  收藏  举报