שילוב של האופרטורים In ו-Like

27/09/2016

אין תגובות

נניח שרוצים למצוא בטבלה את כל השורות בהן עמודה מסויימת שווה ל-.. או ל.. או ל.. וכו’ (רשימה ארוכה של ערכים אפשריים). במקום לכתוב משהו כמו-

Select  *

From    MyTbl

Where    MyCol='..' Or MyCol='..' Or MyCol='..' ..

נכתוב משהו אלגנטי וקריא יותר בסגנון של-

Select  *

From    MyTbl

Where   MyCol In ('..', '..', '..', .. ..);

מה נעשה אם נרצה לכתוב משהו כמו-

Select  *

From    MyTbl

Where    MyCol Like '%..%' Or Like MyCol='%..%' Or MyCol Like '%..%' ..

הרי לא נוכל לשלב In ו-Like ביחד.
מה עושים?
פתרון פשוט אין, אבל החל מגרסת 2016 (או SQL Azure) ניתן להשתמש בפונקציה String_Split בהנחה שקיבלנו את רשימת הערכים בתור מחרוזת.
למשל- נחפש בטבלת הודעות השגיאה של המערכת, את ההודעות הכוללות רצף של 4 אותיות עוקבות (abcd או bcde וכו’), בעזרת מחרוזת הכוללת את כל תתי המחרוזות האפשריות:

Declare  @S Varchar(Max)='abcd,bcde,cdef,defg,efgh,fghi,ghij,hijk,ijkl,jklm,klmn,lmno,mnop,nopq,opqr,pqrs,qrst,rstu,stuv,tuvw,uvwx,vwxy,wxyz';

Select   *

From     sys.messages M

Where    Exists (Select    *

                From    String_Split(@S,',') SS

                Where    M.text Like '%'+SS.value+'%');

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *