我在T-SQL中编写标量函数。该函数应将前导零插入到数字的输入字段中,输入的长度可以在长度上变化,即e。 123,1234567,9876543210等。
我不确定我是否正确定义了字段,因为我正在尝试包含一个输入变量和一个对我来说都是新的输出变量。我正在尝试在输入字段前面插入前导零并返回带有前导零的值输入。
ALTER FUNCTION dbo.FN_ZeroPad
(
@FN_Input_No varchar(13)
)
RETURNS varchar(13)
AS
BEGIN
declare @FN_PadZero varchar (13),
@Return varchar (13)
Set @FN_PadZero = '0000000000000'
select @Return =
Case
When @FN_Input_No is null then 'Missing'
When @FN_Input_No < = 0 then '0000000000000'
When @FN_Input_No > 0 then (@FN_PadZero + @FN_Input_No)
else null End
RETURN @return
End
答案 0 :(得分:2)
当字符串小于13个字符时,尝试使用此字符串填充零字符串。
ALTER FUNCTION dbo.FN_ZeroPad
(
-- the parameters for the function here
@FN_Input_No varchar(13)
)
RETURNS varchar(13)
AS
BEGIN
declare @Return varchar(13)
SELECT @return = RIGHT(REPLICATE('0', 13) + @FN_Input_No, 13 )
RETURN @return
End
答案 1 :(得分:2)
只需要一行:不需要打扰LEN或REPLICATE或ISNULL或CONVERT或CAST或局部变量......
ALTER FUNCTION dbo.FN_ZeroPad
(
-- the parameters for the function here
@FN_Input_No varchar(13)
)
RETURNS varchar(13)
AS
BEGIN
RETURN RIGHT('0000000000000' + @FN_Input_No, 13)
END
答案 2 :(得分:1)
您的功能无法正常工作。您正在构建一个大于变量大小的字符串,当您分配给@return
变量时,它将采用最左侧的字符,因此它将始终返回0000000000000
。
您最好的选择是使用此功能进行填充,这比您尝试使用的功能更灵活,因为您可以指定要填充的字符数(最多为返回变量的长度)以及更改填充字符):
CREATE FUNCTION [dbo].[PadString]
( @Seq varchar(16),
@PadWith char(1),
@PadLength int
)
RETURNS varchar(16) AS
BEGIN
declare @curSeq varchar(16)
SELECT @curSeq = ISNULL(REPLICATE(@PadWith, @PadLength - len(ISNULL(@Seq ,0))), '') + @Seq
RETURN @curSeq
END
使用此功能
SELECT dbo.PadString ('13', '0', 5)
如果需要,可以在select语句中将用户定义函数用作另一列。它们比存储过程提供更大的灵活性,代价是需要一个返回值,这就是你在这种情况下所拥有的,因此UDF非常适合。
此功能从此处复制:
http://blogs.ugidotnet.org/fgiossi/archive/2007/11/15/how-to-format-a-value-using-t-sql.aspx
答案 3 :(得分:0)
RIGHT('0000000000000'+[field], 13) AS aliasName