PDA

View Full Version : سوال: پیدا کردن عدد در یک ستون با فرمت خاص



siavashman
سه شنبه 16 شهریور 1389, 18:24 عصر
جدولی به نام table1 ستونی به نام ab

توی این ستون اطلاعاتی با فرمت text زیر هست:

,3,4,5,6,7,1,4,

چه جوری باید بگیم عددهایی که تو این ستون مثلا بین 2 و 5 هستند رو برگردونه؟

من از این استفاده کردم ولی جواب درستی بهم نمیده:

select * from table1 where ab >="%2%" and ab <="%5%"

چی کار کنم؟:متفکر:

siavashman
چهارشنبه 17 شهریور 1389, 17:19 عصر
چرا هیچکی جوابما نمیده؟

ahmadpj
جمعه 19 شهریور 1389, 10:19 صبح
تو اپلیکشین میخوای این اعداد رو پیدا کنی یا با sql؟

ahmadpj
جمعه 19 شهریور 1389, 12:54 عصر
دستور sql با یک خط اینجوری جواب نمیده، باید کرسر درست کنی و رکوردها رو پیمایش کنی و دنبال اعداد بگردی
تو اپلیکیشن راحت تره، اما با sql هم میشه.

فرض من اینه که اسم جدولت table3 و اسم فیلدت ab باشه و رکوردهات چنین فرمتی دارن:


3,4,5
6,7,9,10
3,6,11,45,23


این دستورها جواب میده:


DECLARE @L1 varchar(100)
DECLARE @d1 varchar(50)

-- یک کرسر تعریف می کنیم برای پیمایش جدول

DECLARE MyCursor CURSOR FOR
SELECT ab FROM table3
OPEN MyCursor


-- همه ی رکوردها رو می خونیم و توی یک متغیر ذخیره می کنیم

set @l1=''
FETCH NEXT FROM MyCursor INTO @d1
WHILE @@FETCH_STATUS = 0
BEGIN
if @l1 = ''
begin
set @L1 = Cast(@d1 As varchar(50))
end
else
begin
set @L1 = @l1 +','+ Cast(@d1 As varchar(50))
end
FETCH NEXT FROM MyCursor INTO @d1
END

CLOSE MyCursor
DEALLOCATE MyCursor


-- حالا متغیر l1 یک استرینگه که همه ی اعداد اون فیلد در کل رکوردها رو داره
-- باید در متغیر l1 بگردیم و اعداد رو از بین ویرگول ها جدا کنیم تا آخر

DECLARE @x int
DECLARE @pos1 int
DECLARE @c varchar(50)
DECLARE @rem varchar(1000)

set @rem=@l1
set @c='a'
set @x=1
set @pos1=1

--print @rem
while len(@rem) >0
begin
set @pos1= charindex(',',@rem,1)
if @pos1 =0
begin
if cast(@rem as int)> 2 and cast(@rem as int)< 5 print @rem
break
end
else
begin
-- print @pos1
-- print @x
set @c= substring(@rem,1, @pos1-1)
if cast(@c as int)> 2 and cast(@c as int)< 5 print @c
set @rem= substring(@rem,@pos1+1,len(@l1) )
-- print 'rem= '+ @rem
set @x=@pos1+len(@c)
end
end

اگه باز هم مشکلی بود، بگو تا بیشتر توضیح بدم