2012-06-30 87 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