חיימקה משתמש חבר
הצטרף / הצטרפה: 18 April 2010 מדינה: Israel
משתמש: מנותק/ת הודעות: 243
|
נשלח בתאריך: 14 March 2012 בשעה 22:10 | | IP רשוּם
|
|
|
|
בס"ד
Sql Servre 2005 : איך מחלצים את התאריך בלבד משדה מסוג DateTime? למרבה ההפתעה אין פונקציה ישירה כזו בנוסח Date(myDateTime).
ברשת מסתובבות דוגמאות כאלה:
קוד:
SELECT Convert(VARCHAR(10), GetDate(), 103);
|
|
|
תוצאה: 14/03/2012. לכאורה נפלא, אך זה אובייקט String, ועלולות להיווצר שגיאות. (למשל: בהמרת תוצאה זו לאובייקט DateTime של Dot.NET, בפלטפורמות מסויימות זה ייקרא כמו "היום השלישי לחודש הארבעה עשר", מה שבוודאי שגוי.) רעיון שהגה אלחנן, עמיתי:
קוד:
SELECT Convert(DATETIME, Convert(INT, GetDate() - 0.5));
|
|
|
הסבר שלבי הפתרון: 1. הפוך את התאריך למספר מסוג int. כיון שהתאריך המלא הינו מספר הכולל שבר עשרוני המייצג את חלקי היום - השעות והדקות, הרי שכשנהפוך אותו ל int נעגל את המספר למספר שלם, כלומר ללא חלקי יום, כלומר ללא שעות ודקות. 2. את המספר שהתקבל הפוך בחזרה ל DateTime ! 3. הפיכת מספר אמיתי למספר שלם אינה מוחקת את השבר, אלא מעלת אותו. כאשר השבר גדול מ 0.5 היא מעגלת אותו כלפי מעלה. אם כך, כאשר השעה מאוחרת מ 12 PM, אנו נקבל, בעצם, את היום הבא! איך נמנע בעיה זו? - לפני הפיכת התאריך למספר, נפחית מהתאריך חצי יום, ורק אח"כ נהפוך אותו למספר!
א"כ, אלו השלבים, מהביטוי הפנימי ביותר - החוצה: 1. הפחתת חצי יום מהתאריך: 2. הפיכת התוצאה למספר מעוגל:
קוד:
Convert(INT, GetDate() - 0.5 [/)
|
|
|
3. הפיכת התוצאה לתאריך:
קוד:
Convert(DATETIME, Convert(INT, GetDate() - 0.5 [/)) |
|
|
.
בראבו!!
__________________ אין יאוש בעולם כלל!
|