הבלוג של גרי רשף

25/04/2010

חיפוש עם תווים בעייתיים

Filed under: Uncategorized — תגיות: — גרי רשף @ 12:47

נניח שאנחנו רוצים לחפש שורות בהן מופיע הצירוף 100% בשדה טקסטואלי,
למשל במקרה הזה:

Create Table #Ovdim(ID Int Not Null Primary Key,

                    Shem VarChar(50),

                    Heara NVarChar(Max));

Go

Insert Into #Ovdim Values(1,'Ada','העובדת הראשונה');

Insert Into #Ovdim Values(2,'Beni','הוא 100% בסדר');

Insert Into #Ovdim Values(3,'Galit','גם היא בסדר');

Insert Into #Ovdim Values(4,'Dan','יש לו 100 במתימטיקה');

Insert Into #Ovdim Values(5,'Hila',Null);

לכאורה קלי קלות (כדי לקבל את בּנִי):

Select    *

From    #Ovdim

Where    Heara Like '%100%%'

דא עקא שבמקרה זה נקבל את כל השורות בהן מופיע הצירוף 100, מכיוון ש-% הוא "ג'וקר" שמחליף כל תו אחר.

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

לגבי הדוגמה של 100% אפשר לחפש כך:

Select    *

From    #Ovdim

Where    Heara Like '%100~%%' ESCAPE '~'

ולגבי הסוגריים המרובעים ניתן לעיין בקישור שצירפתי,

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

למשל לגבי 100%:

Select    *

From    #Ovdim

Where    Len(Heara)<>Len(Replace(Heara,'100%',''))

כלומר- האורך של שדה ההערה שונה מאורכו לאחר שנחליף את '100%' ב-"..

בדקתי את חוות דעתו של ה-Execution Plan מול טבלה גדולה יחסית:

Select    *

From    AdventureWorks.Person.Address

Where    AddressLine1 Like '%100~%%' ESCAPE '~'


Select    *

From    AdventureWorks.Person.Address

Where    Len(AddressLine1)<>Len(Replace(AddressLine1,'100%',''))

ה-Estimated Execution Plan היה זהה בשני המקרים,

אם כי דומה שהאומדנים היו מופרכים (לפחות לגבי ה-Estimated Numer of Rows),

אבל בכל מקרה לא נראה לי שאמור להיות הבדל דראסטי בינהם (מעבר על כל הטבלה ובדיקה של כל רשומה).

השלמות (21/05/2010): ניתן לשלוף על ידי תחימת התווים הבעייתיים בסוגריים מרובעים, למשל מחרוזות בהן מופיע %-

Where MyField Like '%[%]%'

מודעות פרסומת

להגיב »

עדיין אין תגובות.

RSS feed for comments on this post. TrackBack URI

להשאיר תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

בלוג בוורדפרס.קום.

%d בלוגרים אהבו את זה: