בדיקת תקינות synonyms כתרגיל טכני

יום חמישי, ינואר 1, 2015

תוך כדי עבודה אנחנו לומדים טריק פה ופטנט שם, התחכמות כאן ותעלול שם; ויש סיכוי טוב שביום מן הימים נעשה שימוש בהם בבעיות ובמקומות אחרים, ואולי גם נקצור תשואות חן על השימוש היצירתי.הפוסט שלהלן אינו עוסק באיזו טכנולוגיה חדשנית, אולן נעשה בה שימוש בכל מיני תחבולות שלחלקו הוקדשו פוסטים בעבר, ושווה לרענן את הזכרון. סיפור המעשה הוא כדלקמן: יש לנו synonyms באחד הדטבייסים, ויש לבדוק שאלו שפונים לשרתים אחרים דרך Linked Servers – תקינים.Synonyms הם קיצורי דרך לאובייקטים: טבלאות או פרוצדורות וכו’, בדטבייס שלנו או באחר, או אפילו בשרת נפרד. כך ניתן להגדיר ש-Kuku1 הוא synonym לטבלה MyTbl בדטבייס...
אין תגובות

התאמות בין מחרוזות

יום שני, אוקטובר 22, 2012

בעייה שניתקלתי בה לאחרונה: נתונה טבלה ובה מחרוזות, ויש לבדוק ולהשוות כל אחת מהן למחרוזת חיצונית ולבדוק כמה התאמות יש (כלומר- כמה "בולים" יש כמקובל במשחק בול-פגיעה). לדוגמה- טבלה עם מספר מחרוזות (במקרה זה מחרוזות של ספרות אך ניתן גם תווים אחרים): Create Table #T(ID Int Primary Key, Nm Varchar(20)); Go   Insert Into #T Select...
אין תגובות

מסכת קלט ב-SQL Server

יום שבת, אוגוסט 4, 2012

נפתח בהנמכת ציפיות- אין מסכת קלט ב-SQL Server: הוא אינו מספק לנו ממשק משתמש ואין זה מתפקידו לזעוק חמס אם המשתמש מקליד אותיות במקום ספרות וכו'. זאת ועוד- יכולותיו בניתוח מחרוזות טקסט מוגבלות, ובמקרה הצורך יש לכתוב פרוצדורות מתאימות ב-Clr.. עדיין, ניתן לעשות הרבה מאוד גם בעזרת המעט שהמערכת מציעה, כל זאת כאשר אנו מצויידים בתושיה, יצירתיות ורוח קרב! דוגמה לבעייה- יש לבדוק האם מחרוזות מסויימת עונה לתנאי AAA999999AA9, כלומר, צירוף של אותיות וספרות כאשר A מייצגת אות ו-9 ספרה: Declare @Sn Varchar(Max)=''; --digit ...
2 תגובות

ארגון מחרוזות

יום ראשון, יולי 22, 2012

טיפול במחרוזות הוא אחת החולשות של TSQL ולפתרון בעיות "אמיתיות" יש לכתוב לא פעם פונקציות מיוחדות המתבססות על ספריית הפונקציות של ה-Clr, או לנסות להסתדר עם מה שיש בעזרת הרבה נחישות! בכל מקרה- נתקלתי לאחרונה בבעייה של מחרוזות בהן יש שתי מילים, ויש לסדר אותן כך שהעברית תהיה תמיד ראשונה (או לחילופין- שניה), או שהמספר יהיה ראשון (או לחילופין- שני) וכו'. משימה שמתלבשת ככפפה ליד על הפונקציה PatIndex (למי שתוהה- Pat זה Pattern) שמחפשת במחרוזות נתונות היכן מתחילה תת המחרוזת הראשונה העונה לתנאי מסויים, והיא תשמש אותנו למצוא היכן מתחילה העברית או הלועזית או המספר.. ...
אין תגובות

היפוך חכם של טקסט עברי-לועזי

יום שני, יוני 20, 2011

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

כמה פעמים מופיעה מחרוזת אחת בתוך אחרת?

יום שישי, אפריל 9, 2010

טריק עתיק יומין ופשוט ששלפתי מהבוידעם לאחר שנתקלתי בדוגמה הזו שמצליחה לסבך את הבעייה ללא צורך. הטריק הוא למצוא את ההפרש בין אורך המחרוזת המקורית, לבין אורך המחרוזת לאחר שהסרנו ממנה את תת המחרוזת. למשל- כמה פעמים מופיעה האות e בשם Geri Reshef? אורך השם Geri Reshef הוא 11 תווים, אם נוריד את e נקבל Gri Rshf שאורכו 8 תווים, ומכאן ש-e מופיע 3=11-8 פעמים. לו הייתי מחפש תת מחרוזת שאורכה גדול מ-1, היה עלי לחלק את התוצאה באורך תת המחרוזת. דוגמה לחיפוש מחרוזת באורך תו אחד: Declare @S1 Varchar(Max), @S2 Varchar(Max); Select @S1='Geri Reshef', ...
אין תגובות

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

יום שישי, מרץ 12, 2010

(פורסם לראשונה ב-www.SqlServer.co.il) נתונה לנו מחרוזת עם מספר ארצות-'Israel,England,Argentina,India,Kenya,Australia'. מה המדינה השלישית ברשימה? למצוא את הראשונה על ידי T-SQL קל- בעזרת פונקצית CharIndex נמצא את הפסיק הראשון, וכל מה שלפניו זו המדינה הראשונה: Declare @S VarChar(Max)= 'Israel,England,Argentina,India,Kenya,Australia', @I Int; Set @I=CHARINDEX(',',@S); Select SubString(@S,1,@I-1) FirstCountry; אבל כדי למצוא את המדינה השלישית יש להתחיל לחפש את השני בעזרת CharIndex לאחר הראשון, ואת השלישי לאחר השני, והמדינה היא תת המחרוזת שבין השני לשלישי.. מסובך: Declare @S VarChar(Max)= 'Israel,England,Argentina,India,Kenya,Australia', @I1 Int, ...
אין תגובות