问题描述
CREATE FUNCTION [dbo].[lengthCheck]
(@string nvarchar(14))
RETURNS nvarchar(50)
AS
BEGIN
IF LEN(@string) < 8
BEGIN
return 1
END
IF LEN(@string) > 14
BEGIN
return 2
END
return 0
END
如果我的输入长度小于8,则需要返回1,如果大于14,则返回2,否则返回0
下面是输出:
select [dbo].[lengthCheck] ('123') --> return 1
select [dbo].[lengthCheck] ('123456789') --> return 0
但是当我输入的字符超过14个时,它不会返回2
select [dbo].[lengthCheck] ('1234567899999999') --> return still as 0
预期输出:
select [dbo].[lengthCheck] ('1234567899999999') --> return 2
解决方法
首先,您将输入参数定义为nvarchar(14)
,因此您输入的字符数不得超过14个。因此,请将其重新定义为要支持的实际最大长度,例如nvarchar(max)
然后使用case
表达式作为它更适合这种逻辑。
RETURN CASE WHEN LEN(@string) < 8 THEN 1 WHEN LEN(@string) > 14 THEN 2 ELSE 0 END
,
输入为nvarchar(14)
,因此它将始终为14个字符。当nvarchar
的大小增加时,LEN(@string) > 14
的返回值将为2。