2012-06-30 134 views
0

塊引用SQL WHERE子句的情況下與像

DECLARE @Symbol nvarchar(50); 
DECLARE @EnDate1 Datetime; 
DECLARE @StDate1 Datetime; 
SET @Symbol = 'RIM12f' 
SET @EnDate1 = '05/08/2012 9:00' 
SET @StDate1 = '05/07/2012 12 : 00' 
SELECT * 
FROM Siri 
WHERE (DATEADD(D, 0, DATEDIFF(D, 0, Date)) BETWEEN @StDate1 AND @EnDate1) 
    AND CASE Symbol = WHEN @Symbol = 'ALL' 
        THEN Symbol 
        ELSE Symbol LIKE LEFT(@Symbol, len(@Symbol) - 3) + '%' 
     END 

它不工作方式相同,但 它與其他@Symbol 但我需要一個像LEFT(@Symbol,LEN(@Symbol)所有符號 - 3)+ '%' 如果@Symbol比所有

+0

這是SQL服務器 – Venkat

+0

不認爲它的SQL服務器上,看起來像那些邪惡confabulations像FORBOL給我一個。 :) –

+0

我是非常新的編碼 – Venkat

回答

2

其他修改你的CASE表達式:

Symbol LIKE CASE @Symbol WHEN 'ALL' 
        THEN Symbol 
        ELSE LEFT(@Symbol, len(@Symbol) - 3) + '%' 
0
DECLARE @Symbol nvarchar(50); 
DECLARE @LikeSymbol nvarchar(50); 

DECLARE @EnDate1 Datetime; 
DECLARE @StDate1 Datetime; 
SET @Symbol = 'RIM12f' 
SET @EnDate1 = '05/08/2012 9:00' 
SET @StDate1 = '05/07/2012 12 : 00' 
SET @LikeSymbol = LEFT(@Symbol, length(@Symbol) - 3) + '%' 
SELECT * 
FROM Siri 
WHERE (DATEADD(D, 0, DATEDIFF(D, 0, Date)) BETWEEN @StDate1 AND @EnDate1) 
AND (
(@Symbol = 'All') 
OR 
(Symbol Like @LikeSymbol) 
) 

猜測明朗

+0

它工作不正常 – Venkat

+0

不要對我matey SHOUT,什麼不工作? –

0

看到作爲查詢的意圖是遠遠不能在CASE=和嵌套LIKE ..你可以像使用或使用ORAND結構..(如建議@Tony霍普金森)

這裏被修改的情況下:

Symbol like CASE WHEN @Symbol = 'ALL' 
        THEN Symbol 
        ELSE LEFT(@Symbol, len(@Symbol) - 3) + '%' 
END 
+0

對不起,複製粘貼時出錯,請重試..我只是在SQL SERVER 2000上運行它,它工作正常 – ALZ