Reputation: 61
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
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+'%')
Upvotes: 2
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