简体   繁体   中英

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.

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 .

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 + '%')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM