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

יום שלישי, ספטמבר 27, 2016

נניח שרוצים למצוא בטבלה את כל השורות בהן עמודה מסויימת שווה ל-.. או ל.. או ל.. וכו’ (רשימה ארוכה של ערכים אפשריים). במקום לכתוב משהו כמו- Select *From MyTblWhere MyCol='..' Or MyCol='..' Or MyCol='..' .. נכתוב משהו אלגנטי וקריא יותר בסגנון של- Select *From MyTblWhere MyCol In ('..', '..', '..', .. ..); מה נעשה אם נרצה לכתוב משהו כמו- Select *From MyTblWhere MyCol Like '%..%' Or Like MyCol='%..%' Or MyCol Like '%..%' .. הרי לא נוכל לשלב In ו-Like ביחד.מה עושים?פתרון פשוט אין,...
אין תגובות

היכן הפסיק ה-n-י? (מציאת מופע של תת מחרוזת): גרסת ה-String_Split

יום חמישי, אפריל 7, 2016

לפני למעלה מ-6 שנים, בראשית דרכי כבלוגר, פרסמתי את הפוסט היכן הפסיק ה-n-י? (מציאת מופע של תת מחרוזת):נתונה טבלה ובה עמודת Subjects עם מקצועות שונים שכל סטודנט לומד - Create Table T_Students (Name VarChar(50), Subjects VarChar(Max));GoInsert Into T_StudentsValues ('Ana','Geography,Literature'), ('Beni','Chemistry,Economics,History,Sociology'), ('Carmel',''), ('Dana','Literature,Economics,Philosophy,Sociology'), ('Eli','Zoology,Economics,Geography,History,Science'), ('Felicia','Medicine');Go ויש לשלוף את המקצוע הרביעי (אם יש..) של כל סטודנט.הפתרון שאז מצאתי, בלוגר צעיר ונרגש שחרד...

פונקצייה חדשה: String_Split

יום שני, מרץ 28, 2016

פונקצייה חדשה שהתווספה לגרסה האחרונה של 2016, וכפי ששמה מעיד עליה – היא מבצעת Split והופכת מחרוזת לסט.בערך כך: Select *From String_Split('1,2,3,4,5,6,7,8,9,10',','); צריך להעביר שני פרמטרים: המחרוזת שצריך לפצספלט (שילוב של פיצול וספליט) והתו המפריד בין ערך לערך (תו אחד בלבד!).עד כה היינו צריכים להתלבט בין שימוש ב-CTE רקורסיבי או XML (מוסרבל ולא יעיל), דרך פונקציית משתמש (יותר יעיל אך מחייב יצירת אובייקט), וכלה בפונקציית CLR (הכי יעיל אבל צריך “ללכלך” את הידיים ולתחזק את הקוד). כעת יש כלי מובנה והחיים נראים יפים מתמיד! טוב. אז מה עושים עם זה: אמרנו כבר Split?...
אין תגובות

תנאי In בעזרת פרמטר עם רשימת ערכים

יום שישי, ספטמבר 13, 2013

נניח שנתון פרמטר המכיל רשימת ערכים, ועלינו לשלוף אותם. משהו בסגנון של- Declare @S Varchar(Max)='1,3,9,2'; Select * From MyTbl Where ID In (@S); כמובן שהסינטקס הזה אינו חוקי, והשאלה מה כן.. לצורך היישום ניצור טבלת פרחים לרגל הסתיו המתדפק על דלתותינו: If Object_ID('tempdb..#Prahim','U') Is Not Null Drop Table #Prahim; Go   Create Table #Prahim(ID Int Primary Key, ...
תגיות: , , , ,
2 תגובות

יעילות תנאי In

יום שישי, דצמבר 28, 2012

האופרטור In (כחלק מפסוקית ה-Where) הוא מאוד פופלרי כשרוצים להשוות בין ערך לרשימת ערכים ללא שימוש ב-Or מסובך. למשל- במקום Where @X=1 Or @X=2 Or @X=3 אפשר בקיצור (Where @X In (1,2,3. יתרוהו הגדול של האופרטור In שהוא פשוט להבנה ונוח לשימוש, ולא פעם משמיצים את ביצועיו שלא בצדק. כל עוד מדובר ברשימה קצרה של מספר ערכים – אין טעם להתעמק בביצועים, אך מה קורה אם מדובר ברשימה ארוכה? אני אבדוק שלוש אפשרויות: 1. In עם רשימת ערכים מפורשת. 2. In הפונה לטבלה (ממופתחת ומאונדקסת...
אין תגובות

ערכים ברשימה שאינם מופיעים בטבלה

יום ראשון, יוני 20, 2010

במקום העבודה שלי משתמשים באוראקל.. חז"ל כבר פסקו שמוטב לפשוט נבלה בשוק מלהזדקק למתנת בשר ודם, אז קל וחומר שמותר בשעת הדחק לעבוד עם אוראקל.. (זה נאמר כמובן בחיוך – אינני מזלזל חלילה במתחרים!). פנה אלי חבר מצוות הפיתוח בשאלה כיצד ניתן למצוא אילו ערכים ברשימה שבידו (רשימת ערכים מופרדים על ידי פסיקים) אינם מופיעים בטבלה; כלומר- לא המקרה הרגיל של Select * From .. Where .. Not In אלא המקרה ההפוך בו מחפשים מה נמצא ברשימה שבסוגריים אך לא בטבלה. הרהרתי ארוכות ואמרתי לו שלדעתי אין לזה פתרון, זולת להכניס את הרשימה לעורך טקסטואלי, להפוך אותה לסט תוך שימוש ב-Select וב-Union בין...
אין תגובות