Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从TSQL标量函数返回串联值_Sql Server_Tsql_User Defined Functions - Fatal编程技术网

Sql server 从TSQL标量函数返回串联值

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

我正在用T-SQL编写一个标量函数。函数应该在数字输入字段中插入前导零。输入的长度可以不同,即,。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
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