Reputation: 45
Blockquote
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
it does not works as same but it works with else @Symbol but i need all symbols like LEFT(@Symbol, len(@Symbol) - 3) + '%' if @Symbol other than all
Upvotes: 0
Views: 725
Reputation: 1998
You cannot have in CASE
both =
and nested LIKE
.. you can use LIKE or using OR
and AND
constructions.. (like suggested @Tony Hopkinson)
Here is modified case:
Symbol like CASE WHEN @Symbol = 'ALL'
THEN Symbol
ELSE LEFT(@Symbol, len(@Symbol) - 3) + '%'
END
Upvotes: 0
Reputation: 16144
Modify you Case expression:
Symbol LIKE CASE @Symbol WHEN 'ALL'
THEN Symbol
ELSE LEFT(@Symbol, len(@Symbol) - 3) + '%'
Upvotes: 2
Reputation: 20320
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)
)
A guess seeing as the intent of your query is far from clear
Upvotes: 0