在标量函数中使用多个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。