如何解决在标量函数中使用多个IF
我在下面有一个标量函数:
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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。