7

我正在创建一个函数来根据嵌套 if else 语句的结果返回“0”或“1”。使用 MSSQL。

ALTER FUNCTION udf_check_names_starting_with_quotationmark
(@string NVARCHAR(100))
RETURNS INT
AS
BEGIN
  DECLARE @condition INT
  SET @string = LTRIM(@string)
  SET @string = RTRIM(@string)

  IF (PATINDEX('"%', @string) !=0)
    BEGIN
      SET @condition = 1
    END
  ELSE IF (PATINDEX('%"%', @string) !=0) 
    BEGIN
      SET @condition=1
    END
  ELSE IF (PATINDEX('%"', @string) !=0)
    BEGIN
      SET @condition = 1
    END
  ELSE
    BEGIN
      SET @condition=0
    END
  RETURN @condition
END

一切正常。有没有更好的方法来实现这一点(我尝试使用 OR,但 SQL 编辑器显示错误,无法识别 OR)。

4

2 回答 2

6
SET @condition = (case when PATINDEX('"%', @string) !=0 or 
                            PATINDEX('%"%', @string) !=0 or 
                            PATINDEX('%"', @string) !=0 then 1 else 0 end)
于 2013-04-09T11:25:44.993 回答
3

当然,这可以简化为:

  IF (PATINDEX('%"%', @string) !=0) 
    BEGIN
      SET @condition=1
    END
  ELSE
    BEGIN
      SET @condition=0
    END

- 因为PATINDEX('%"%', @string)将 > 0 其中一个PATINDEX('"%', @string)或 PATINDEX('%"', @string) > 0?

于 2013-04-09T11:41:28.940 回答