PDA

View Full Version : مشکل در شرط where



sknsphr
چهارشنبه 19 دی 1386, 14:14 عصر
سلام
من یه جدول tbl1 دارم که یه فیلد به نام model از جنس varchar داره. اطلاعات تو این فیلد به این شکل ذخیره شده:



rec1: ab
rec2: cab_abd
rec3: hl_hlp_dab
rec4: cd_ab
rec5: lk_ab_op
rec6: ab_lk_op


کاراکتر "_" به عنوان جداکننده است.
میخوام با یه select رکوردهایی رو انتخاب کنم که "ab" داشته باشند. یعنی با شرایط بالا rec1 ، rec4 ، rec5 و rec6 انتخاب بشه. شرط where رو چه جوری بنویسم؟
ممنون

reza_rad
چهارشنبه 19 دی 1386, 15:05 عصر
از like استفاده کنید:



Select * from tbl1
where
model like '%[_]ab'
or like 'ab[_]%'
or like '%[_]ab[_]%'
or like 'ab'


http://msdn2.microsoft.com/en-us/library/ms179859.aspx

SYNDROME
چهارشنبه 19 دی 1386, 15:20 عصر
این جوری هم می توانید بنویسید.


Select * from tbl1
where
model like '%ab%'

موفق باشید

reza_rad
چهارشنبه 19 دی 1386, 15:49 عصر
این جوری هم می توانید بنویسید.
اینجوری تمام رکوردهای بالا در نتیجه کوئری نشون داده میشه. در صورتیکه ایشون می خوان نتیجه رکوردهای 1و4و5و6 باشه.

SYNDROME
چهارشنبه 19 دی 1386, 18:43 عصر
اینجوری تمام رکوردهای بالا در نتیجه کوئری نشون داده میشه. در صورتیکه ایشون می خوان نتیجه رکوردهای 1و4و5و6 باشه.
کاملا درست است.(من حواسم نبود).
ولی اگر از کاراکتر جدا کننده در دو طرف استفاده کند می تواند با همان یک شرط به جواب برسد.


Select * from tbl1
where
model like '%_ab_%'

موفق باشید

reza_rad
پنج شنبه 20 دی 1386, 09:25 صبح
ولی اگر از کاراکتر جدا کننده در دو طرف استفاده کند می تواند با همان یک شرط به جواب برسد.
باز هم اشتباه است.
کوئری شما ab به تنهایی را جواب نمی دهد. یا عبارتهایی که شامل ab در اول یا آخر عبارت باشند.
این کوئری شما فقط سطر های 2 و5 را نتیجه می دهد که درست نیستند.


البته کوئری که من گذاشتم یک ایراد سینتکسی داشت که رفع شد:


select * from tbl1
where model like '%[_]ab' or
model like 'ab[_]%' or
model like '%[_]ab[_]%' or
model like 'ab'

SYNDROME
پنج شنبه 20 دی 1386, 14:20 عصر
باز هم اشتباه است.
کوئری شما ab به تنهایی را جواب نمی دهد. یا عبارتهایی که شامل ab در اول یا آخر عبارت باشند.
این کوئری شما فقط سطر های 2 و5 را نتیجه می دهد که درست نیستند.

دوست عزیز من نگفتم با این Query جواب می گیرد.
گفتم اگر در دو طرف ab ها از جداکننده استفاده می کرد به جای 4 شرط با یک شرطی که در بالا اشاره کردم جواب می گرفت.
فقط یک پیشنهاد به دوستمان بود.
موفق باشید

sknsphr
شنبه 22 دی 1386, 11:31 صبح
آقای reza_rad تشکر

SabaSabouhi
شنبه 22 دی 1386, 13:20 عصر
از like استفاده کنید:



Select * from tbl1
where
model like '%[_]ab'
or like 'ab[_]%'
or like '%[_]ab[_]%'
or like 'ab'


http://msdn2.microsoft.com/en-us/library/ms179859.aspx

با سلام
یه کار دیگه هم مى‌شه کرد



SELECT *
FROM tbl1
WHERE '_' + model + '_' LIKE '%_ab_%'



صبا صبوحى

reza_rad
شنبه 22 دی 1386, 13:37 عصر
با سلام
یه کار دیگه هم مى‌شه کرد
کد:

SELECT *
FROM tbl1
WHERE '_' + model + '_' LIKE '%_ab_%'


این کد رکوردی که شامل abf هم باشه رو بر می گردونه. در صورتیکه نباید برگردونه. به این دلیل که کاراکتر _ کاراکتر کلیدی هست. و باید داخل [] استفاده بشه. کد شما در صورتی درسته که به این شکل نوشته بشه:


select * from tbl1
WHERE '_' + model + '_' LIKE '%[_]ab[_]%'