חישוב אורך מחרוזת

31/08/2011

המשימה לכאורה פשוטה- הפונקציה המוכרת המבצעת זאת היא Len, אלא שהיא עלולה להכשיל אותנו מכיוון שהיא אינה סופרת את הרווחים המובילים והמסיימים, ובמילים אחרות- מבצעת למחרוזת Trim ורק אז בודקת את אורכה. ציטוט מה-BOL: LEN (string_expression): Returns the number of characters of the specified string expression, excluding trailing blanks. Note: To return the number of bytes used to represent an expression, use the DATALENGTH function. ומה אומר ה-BOL על DataLength? DATALENGTH (expression) : Returns the number of bytes used to represent any expression. כמו בהרבה מקרים אחרים- יש לקרוא את האותיות...
תגיות: , ,
אין תגובות

היררכיית האובייקטים והבעלות (Owner) עליהם

30/08/2011

כל מי שעובר מ-SQL Server ל-Oracle או להיפך- הולך קצת לאיבוד בהתחלה בגלל ההבדלים בהיררכיית האובייקטים בין שתי הסביבות: ב-Oracle אין דטבייסים, ואת מקומם ממלאות הסכימות שאינן רק דרך לארגן את האובייקטים אלא מציינות בעלות עליהם, ובמילים אחרות- ב-Oracle אין הפרדה בין דטבייס & סכימה & משתמש, הם שלושתם אותו הדבר (מקווה שאינני מפספס שום דבר- לא ראיתי Oracle בשנה האחרונה), וכשמשתמש יוצר טבלה- היא נוצרת כברירת מחדל בסכימה שלו והוא הבעלים (Owner) שלה. ב-SQL Server הדברים שונים. עד גרסה 2000 לאובייקטים היה Owner, אבל מאז גרסה 2005 אין זה כך, האובייקטים שייכים לסכימה בדטבייס ולא למשתמש, ורק...
תגיות: , ,
אין תגובות

מיחזור חישובים

28/08/2011

מיחזור הוא מידה נאה במקומנו, וכל המרבה הרי זה משובח: האחד ממחזר חומרי גלם, השני ממחזר בדיחות, ואנחנו נבדוק אם SQL Server ממחזר חישובים שהוא נדרש להם מספר פעמים או מבצע אותם מחדש. ניצור טבלת עזר פשוטה: Use tempdb; Go   If Object_Id('Try','U') Is Not Null Drop Table Try; Go   Create Table Try(I Float); Go   Insert ...
תגיות: , ,
אין תגובות

חיתוך בין רשימות

24/08/2011

פוסט של משה טייכר בשם שליפת מילים מתוך טקסט בTSQL שהתפרסם לאחרונה עודד אותי לפרסם תגובה עקיפה בפוסט הסרת תווים מיותרים בו הצעתי דרך טובה יותר (לטעמי) לבצע מטלה מקדימה שלו, ואילו הפוסט הזה הוא בעקבות פטנט יפה שלמדתי ממנו – ביצוע Split בעזרת XML, ואשר סייע לי לפתור באופן אלגנטי בעייה שנתקלתי בה בעבר. נתחיל מבעייה פשוטה יותר שטיפלתי בה בעקיפין מספר פעמים בעבר (אופציית Multi-Value ב-Reporting Services, יחס של רבים לרבים ללא טבלת עזר) ואציג אותה כאן בצורה מסודרת: נניח שיש לנו טבלת מכירות של מוכרים (מי מכר מה וכמה) וטבלת עמלות שמגדירה לכל מוכר עבור...
תגיות: , ,
אין תגובות

הסרת תווים מיותרים

23/08/2011

יש לנו טקסט אותו אנחנו רוצים לנקות מתווים מיותרים כמו #\|&^ וכו' או להשאיר רק תווים אלפה-נומריים. נתחיל מהאופציה השלילית- הסרת תווים מיותרים: הפתרון המסורבל הוא כדלקמן: Declare @S Varchar(Max); --"מחרוזת טכנית לדוגמה שכוללת הרבה "לכלוך Select @S='abc d1,$ 23A-B`CD''א]ב%ג[דה'; Select @S=Replace(@S,' ',''), --רווח @S=Replace(@S,',',''), @S=Replace(@S,'$',''), ...
תגיות: , ,
אין תגובות

פונקציות החלון החדשות והמחודשות ב-SQL Server 2011 Denali

22/08/2011

פונקציות החלון הוצגו לראשונה בגרסת 2005 והן אפשרו להציג סיכומי Group By בשליפה רגילה, דבר שבגרסאות קודמות היה יכול להתבצע רק על ידי Join בין השליפה הרגילה לשליפת ה-Group By, ובנוסף אפשרו למספר את השורות הנשלפות בדרכים שונות. עם האוכל בא התיאבון, והצורך בשיפורים ותוספות לפונקציות החלון – בעיקר לאור מה שיש למשתמשי אוראקל בני המזל – עודד את מיקרוסופט להשלים את החסר בגרסת Denali, והתוספות – חלקן משמחות מאוד, וחלקן – נו טוב שיהיה.. הבשורה המשמחת ביותר מבחינתי היא הפונקציות Lag & Lead המאפשרות פניה לרשומות קודמות ועוקבות, כשלהן מתווספות First_Value & Last_ Value שמאפשרות להציג את...
תגיות: , ,
אין תגובות

חידושים ב-TSQL בגרסת Denali–SQL Server 2011

13/08/2011

גרסת CTP השלישית של Denali כללה מספר רב של פקודות ואופציות חדשות ב-TSQL, שמסיבה מעט קורת נחת גם למפתחים ולא רק ל-DBA-ים התשתיתיים. על פונקציות החלון החדשות אדלג ואולי אסקור אותן יותר באריכות בעתיד, ואתמקד כאן בפקודות הפשוטות יותר. את הפקודות אציג לא לפי נושאים, אלא לפי ערכן (לעניות דעתי השיפוטית). נתחיל מהפקודות שגורמות גם לפולנים ביננו לגנוח (ולא מצער), שמאפשרות לנו לעשות בקלות דברים שבעבר סיבכו אותנו וגרמו לי לכתוב פוסטים שכעת אין בהם עוד תועלת.. למשל- הפקודה Format שמאפשרת להציג מספרים או...
תגיות: ,
2 תגובות

זיהוי תחומים רציפים בטבלאות לוג

11/08/2011

הפוסט הזה נכתב בעקבות שאלה שנשאלה בפורום בסיסי נתונים בתפוז, והתמודדתי איתה בעזרת טריק יפה שלמדתי מאב"ג לפני שנים רבות באחד ממפגשי ISUG (כשעדיין התכבדנו בנוכחותו). נתונה טבלת נוכחות של סטודנטים, ואנחנו מעוניינים לבדוק כמה ימים ברציפות הם נכחו או נעדרו בכל פעם; או אולי- נתונה טבלת שערי מניות ואנחנו מעוניינים לחלק אותה לתקופות של עליות ותקופות של ירידות (תוך שאנחנו נעזרים באופציות ה-Lead וה-Lag שהתווספו לגרסת Denali שמאפשרות להשוות כל רשומה לקודמת); ואפילו טבלת מזג אוויר בה מצויין מה היה מזג האוויר בכל יום (מעונן חלקית, גשום, שרבי, נאה..) ואנחנו...
תגיות: ,
אין תגובות