Sql server 从TSQL标量函数返回串联值
我正在用T-SQL编写一个标量函数。函数应该在数字输入字段中插入前导零。输入的长度可以不同,即,。123、1234567、9876543210等 我不确定我是否正确定义了字段,因为我正在尝试同时包含输入变量和输出变量,这对我来说是新的。我正在尝试在输入字段前面插入前导零,并用前导零返回输入值Sql server 从TSQL标量函数返回串联值,sql-server,tsql,user-defined-functions,Sql Server,Tsql,User Defined Functions,我正在用T-SQL编写一个标量函数。函数应该在数字输入字段中插入前导零。输入的长度可以不同,即,。123、1234567、9876543210等 我不确定我是否正确定义了字段,因为我正在尝试同时包含输入变量和输出变量,这对我来说是新的。我正在尝试在输入字段前面插入前导零,并用前导零返回输入值 ALTER FUNCTION dbo.FN_ZeroPad ( @FN_Input_No varchar(13) ) RETURNS varchar(13) AS BEGIN declare @F
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
ALTER函数dbo.FN_ZeroPad
(
@FN\u输入\u无varchar(13)
)
返回varchar(13)
作为
开始
声明@FN_PadZero varchar(13),
@返回varchar(13)
设置@FN_PadZero='0000000000000'
选择@Return=
案例
当@FN_Input_No为空时,则为“缺失”
当@FN\u Input\u No<=0时,则为“0000000000000”
当@FN_Input_No>0时(@FN_PadZero+@FN_Input_No)
else空端
RETURN@RETURN
终点
当字符串小于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
您的函数无法按编写的方式工作。您正在构建一个大于变量大小的字符串,当您分配给
@return
变量时,它将使用最左边的字符,因此它将始终返回0000000000000
最好使用此函数进行填充,这比您尝试使用的填充更灵活,因为您可以指定要填充的字符数(最多为返回变量的长度)以及更改填充字符):
使用此功能将是一个非常好的选择
SELECT dbo.PadString ('13', '0', 5)
如果需要,用户定义的函数可以在select语句中作为另一列使用。与存储过程相比,它们提供了更大的使用灵活性,但代价是需要一个返回值(在本例中就是这样),因此UDF非常适合
此函数从此处复制:
只需要一行代码:不需要麻烦处理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
真管用!这比我想的容易多了。非常感谢您的回复!正如gbn所说,无需使用REPLICATE()函数。@user78739感谢您对一个2.5年前的问题的输入。很好,我有一个满足需要的答案,但我也非常感谢您的输入。我认为这也将非常有用。不过,请查看UDF。如果您是T-SQL新手,它们非常有用,因为您可以将它们用作select语句中的一列,这开辟了许多新的使用途径。您可能只需要在答案中添加一点文字,来解释这是如何解决问题的,以及为什么您认为这是一个比以前给出的答案更好的答案,包括OP接受的一个。
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
RIGHT('0000000000000'+[field], 13) AS aliasName