gopi
gopi

Reputation: 61

SQL Server 2005 where clause

I have a table with this columns and values:

Symbol        
---------------------
RELIANCE14JULFUT         
RELIANCE14JUL900CE         
RELIANCE14JUL1020CE                                
RELIANCE14JUL1040PE
RELIANCE14JUL1140PE         

My code:

Declare @Date datetime;
Declare @Symbol Nvarchar (50);
Declare @SpFrom Nvarchar (50);
Declare @SpTo Nvarchar (50);

Set @Date = '07/23/2014'
Set @Symbol = 'RELIANCE14JUL'
Set @SpFrom = 1000 -------- use 1000
Set @SpTo = 1100

use GRAPHS;


Select Symbol 
from Opt
where 
    (Symbol like @Symbol+'%' and replace (Symbol, @Symbol, '') = 'FUT')
    or (left(Replace(Symbol, @Symbol, ''), len(Replace(Symbol, @Symbol, '')) - 2) between @SpFrom and @SpTo 
        and Symbol like @Symbol + '%')

If @SpFrom = 1000 then I get

Symbol        
---------------------
RELIANCE14JULFUT                  
RELIANCE14JUL1020CE                                
RELIANCE14JUL1040PE    

If @SpFrom = 900 then I get only

Symbol        
---------------------
RELIANCE14JULFUT   

but I need:

Symbol        
---------------------
RELIANCE14JULFUT         
RELIANCE14JUL900CE         
RELIANCE14JUL1020CE                                
RELIANCE14JUL1040PE

please help me.

Upvotes: 0

Views: 52

Answers (2)

Joachim Isaksson
Joachim Isaksson

Reputation: 180987

You're doing a string comparison in BETWEEN when you most likely mean to do an integer comparison. You'll need to cast your string to an integer before comparing;

SELECT Symbol FROM Opt
WHERE (Symbol like @Symbol+'%' AND REPLACE(Symbol,@Symbol,'')='FUT')
   OR (CAST(left(Replace(Symbol,@Symbol,''), 
            len(Replace(Symbol,@Symbol,''))-2) AS INT) 
         BETWEEN @SpFrom AND @SpTo AND Symbol LIKE @Symbol+'%')

An SQLfiddle to test with.

Upvotes: 2

Farrokh
Farrokh

Reputation: 1167

you should to cast your number to int

try this:

Declare @Date datetime;
Declare @Symbol Nvarchar (50);
Declare @SpFrom INT;
Declare @SpTo INT;

Set @Date = '07/23/2014'
Set @Symbol = 'RELIANCE14JUL'
Set @SpFrom = 1000 
Set @SpTo = 1100

use GRAPHS;


Select Symbol 
from Opt
where 
    (Symbol like @Symbol+'%' and replace (Symbol, @Symbol, '') = 'FUT')
    or CAST((left(Replace(Symbol, @Symbol, ''), len(Replace(Symbol, @Symbol, '')) - 2) AS INT) between @SpFrom and @SpTo 
        and Symbol like @Symbol + '%')

Upvotes: 0

Related Questions