tag:blogger.com,1999:blog-4022514147659195818.post8901374639052153014..comments2013-08-07T05:25:09.670-07:00Comments on <b>Itai Binyamin</b><br> Data Platform and BI Architect: כמה ימי ראשון יש בין שני תאריכים?itai binyminhttp://www.blogger.com/profile/10086792021465844359noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-4022514147659195818.post-3636082236189714322011-07-11T22:44:12.157-07:002011-07-11T22:44:12.157-07:00אני אוהב להשתמש בפונקציה
DATEPART
DECLARE @Date...אני אוהב להשתמש בפונקציה <br />DATEPART<br /><br />DECLARE @DateStart DATETIME='20110701', @i INT=0<br />WHILE @DateStart <'20110801'<br />BEGIN<br /> IF DATEPART(dw,@DateStart)=1<br /> BEGIN<br /> SET @i=@i+1<br /> END<br /> SET @DateStart=DATEADD(d,1,@DateStart)<br />END<br />SELECT @iפיני קרישרnoreply@blogger.comtag:blogger.com,1999:blog-4022514147659195818.post-46226784341695992402011-07-11T11:36:45.765-07:002011-07-11T11:36:45.765-07:00תרומתי הצנועה (חישוב מספר ימי ראשון ביולי 2011):
D...תרומתי הצנועה (חישוב מספר ימי ראשון ביולי 2011):<br />Declare @FromDate DateTime='20110701',<br /> @ToDate DateTime='20110731';<br />Select (Cast(@ToDate As Int)+1)/7-(Cast(@FromDate As Int)+0)/7 [Saturdays];גרי רשףhttp://http://gerireshef.wordpress.comnoreply@blogger.comtag:blogger.com,1999:blog-4022514147659195818.post-35311097485085825562011-07-11T07:14:26.342-07:002011-07-11T07:14:26.342-07:00איתי הבדיקה שלך מתבססת למעשה על מעבר על כל הימים ב...איתי הבדיקה שלך מתבססת למעשה על מעבר על כל הימים בין 2 התאריכים שהוכנסו (בסך הכל עושים שימוש בטבלה של מספרים על מנת לאפשר dateadd כל פעם ליום הבא)<br /><br />הרעיון יפה <br /><br />נקודה קטנה: נכון ששאילתות בחירה הן הבסיס של SQL והן עובדות מהר מאוד אבל עדיין מאחורי הקלעים יש מעבר על כל הנתונים יום אחרי יום (גם אם מנוהל על ידי השרת ונעשה בצורה מקבילית)<br /><br />רעיון:<br />הרעיון הבא בתכנות ושימוש בלולאות בוודאות ייתן שיפור ניכר של סדרי גודל אבל ב SQL אני לא יודע כמה השיפור יראה. עדיין לא בדקתי אבל אני צופה שככל שתקופת הזמן תהיה גדולה יותר השיפור יראה ב צורה ברורה יותר.<br /><br />הנחת יסוד: אם נתייחס לנתונים כנתונים של ימים רצופים אז לא יכול להיות יום חסר באמצע החישוב אלא רק בהתחלה או בסיום. ז"א לא יכול להיות שיום ראשון יחסר אם היה יום שני אחריו ויום שבת לפניו<br /><br />הבסיס לרעיון: נספור שבועות במקום ימים.<br /><br />לכן מספיק לבדוק את ההשלמה לשבוע בהתחלה ובסיום ואז אתה יודע כמה ימים היו בלי לעבור על כל הנתונים. את מספר השבועות ניתן לקבל מיידית מחישוב בודד של חיסור תאריכים.<br /><br />למשל אם מתחילים ביום שני אז אנחנו יודעים כבר שחסר לנו יום ראשון אחד במספור. אם מסיימים ביום חמישי אז אנחנו יודעים שחסר לנו יום שישי + שבת במיספור (לנוחות תמיד אפשר להוסיף את הימים שהיו חסרים כדי לקבל שבועות שלמים תמיד)<br /><br />עתה בלי שום לולאה ושום מעבר על הנתונים נשאר רק לבדוק כמה שבועות היו בין התאריכים שלנו ויש לנו מייד את התשובה הסופית:<br />יום ראשון היה כמספר השבועות פחות 1 (היה חסר בהתחלה)<br />יום שני עד חמישי היה כמספר השבועות<br />יום שישי + שבת היה כמספר השבועות פחות אחד (היה חסר בסיום)<br /><br />כאמור ככל שתקופת הזמן תהיה גדולה יותר אני צופה עדיפות גבוהה יותר לשיטה זו.ronenhttp://ariely.infonoreply@blogger.com