2013-04-09 40 views
7

Tôi đang tạo hàm để trả về '0' hoặc '1' tùy thuộc vào kết quả của câu lệnh lồng nhau nếu có. Sử dụng MSSQL.Lồng nhau nếu tuyên bố khác

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 

Mọi thứ đều hoạt động tốt với điều này. Có cách nào tốt hơn để đạt được điều này (tôi đã thử sử dụng OR nhưng trình soạn thảo SQL hiển thị lỗi, không nhận ra OR).

Trả lời

6
SET @condition = (case when PATINDEX('"%', @string) !=0 or 
          PATINDEX('%"%', @string) !=0 or 
          PATINDEX('%"', @string) !=0 then 1 else 0 end) 
+0

Thank? bạn rất nhiều cho sự giúp đỡ này .. Tôi đã chơi xung quanh với trường hợp nhưng không thể làm cho nó hoạt động, xấu của tôi .. Cảm ơn .. –

3

Chắc chắn điều này có thể được đơn giản hóa để:

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

- kể từ PATINDEX('%"%', @string) sẽ> 0, nơi một trong hai PATINDEX('"%', @string) hoặc PATINDEX ('% "', @string) là> 0

+0

Cảm ơn bạn đã giúp đỡ .. –

Các vấn đề liên quan