תאריך בעברית ב SQL SERVER
קדם ‹ Forums ‹ הייטק ‹ Database Design & Development ‹ תאריך בעברית ב SQL SERVER
Tagged: תאריך
-
תאריך בעברית ב SQL SERVER
פורסם ע"י צפורה ק.א. הייטק on 01/05/2023 ב2:24 pmשלום,
האם יש לי דרך לדעת את התאריך העברי בתוך SQL?
אני רוצה לבנות ג’וב קבוע שלא ירוץ בחגים – יש דרך למצוא את זה?
תודה
טליה שוורץ הגיבה לפני 1 שנה, 7 חודשים 4 חברות · 8 תגובות -
8 תגובות
-
קראתי על זה קצת,
לכאורה הדרך הקלה ביותר היא למפות את המידע שלך לטבלה.
כלומר- תעשי טבלה עם כל התאריכים הרלוונטיים + מה התאריך הלועזי של אותו תאריך,
(כמה שנים קדימה, כמה שיותר – יותר טוב)
ותבדקי בקוד שלך אם התאריך נמצא בטבלה הזו.
יהיה מעניין לשמוע אם תמצאי רעיון טוב יותר!
בהצלחה!
-
36
ציפי כן, את יכולה לקבוע את התאריך העברי ב-SQL באמצעות פונקציות לוח שנה בעברית שזמינות בחלק ממערכות ניהול מסדי הנתונים של SQL. לדוגמה, ל-Microsoft SQL Server יש פונקציה מובנית בשם “Hebrew_DateFromParts” שלוקחת את השנה, החודש והיום כפרמטרים ומחזירה את התאריך העברי המתאים. משאירה לך שאילתה לדוגמה המשתמשת בפונקציה הזו:
SELECT dbo.Hebrew_DateFromParts(5783, 7, 29) as HebrewDate;
-
36
ארחיב עוד קצת, השאילתה מחזירה את התאריך העברי עבור התאריך הגרגוריאני של 28 בספטמבר 2022.
לגבי השאלה השנייה שלך, את יכולה ליצור עבודה מתוזמנת ב-SQL Server שפועלת בימים ספציפיים בשבוע או בחודש על ידי הגדרת לוח זמנים באמצעות ה-SQL Server Agent.
ואז תוכלי לבצע אי הכללה (אסקלוד) של חגים מלוח הזמנים על ידי יצירת טבלה (קצרה! שפשוט אומרת לדוגמא י’ בתשרי – יום כיפור וכו’. ) טבלה שפשוט מפרטת את כל החגים ולאחר מכן לשנות את לוח הזמנים של הJOB כדי לדלג על התאריכים האלו . את יכולה להשתמש בשאילתת SQL פשוטה כדי לבדוק אם התאריך הנוכחי הוא חג, ואם כן, לדלג על העבודה. לדוגמה:
IF EXISTS(SELECT 1 FROM holidays WHERE holiday_date = CONVERT(date, GETDATE())) BEGIN -- do nothing, it's a holiday END ELSE BEGIN -- run the job END
-
36
בדוגמה האחרונה, השאילתה פשוט בודקת אם התאריך של היום נמצא בטבלת “חגים”, ואם כן, היא לא עושה כלום. אחרת, זה מפעיל את JOB.
מקווה שעזרתי, בהצלחה!
-
תודה רבה על כל התגובות.
ניסיתי לבדוק את הפונקציה הזו:Hebrew_DateFromParts אך הוא לא מכיר אותה , אני משתמשת ב SSMS 2018
גם באינטרנט לא מצאתי איזכור לזה – אולי תשלחי לי לינק איפה ראית את זה?
האפשרות היא אכן למפות את המידע כמה שנים קדימה…
או לעבור דרך אפליקצית NET – שם יש להם קלאס שמטפל בתאריכים עבריים – ולהפעיל את הפרוצדורה דרך שם ולא דרך ג’וב ב SQL.
אם מישהי יודעת עוד משהו , אשמח לשמוע.
-
-
36
לדעתי אל תמפי כמה שנים קדימה זה סיוט ולא כ”כ הגיוני לעבוד ככה..
הנה דוגמא למימוש של הפונקציה הזו להמרת תאריכים גרגוריאניים לתאריכים עבריים עם System.Globalization.HebrewCalendar של .NET. :
using System.Globalization; namespace HebrewDateConverter { public static class HebrewDateConverter { public static string ConvertToHebrewDate(DateTime gregorianDate) { HebrewCalendar hebrewCalendar = new HebrewCalendar(); int hebrewYear = hebrewCalendar.GetYear(gregorianDate); int hebrewMonth = hebrewCalendar.GetMonth(gregorianDate); int hebrewDay = hebrewCalendar.GetDayOfMonth(gregorianDate); string hebrewMonthName = hebrewCalendar.GetMonthName(hebrewYear, hebrewMonth); return $"Hebrew Date: {hebrewDay} {hebrewMonthName} {hebrewYear}"; } } }
-
36
המשך:
תצרי קובץ DLL. בSQL, צרי UDF של SQL Server המפנה לקובץ ה-DLL:
CREATE ASSEMBLY HebrewDateConverterFROM 'C:\path\to\HebrewDateConverter.dll'WITH PERMISSION_SET = UNSAFE;CREATE FUNCTION dbo.ConvertToHebrewDate(@gregorianDate DATETIME)RETURNS NVARCHAR(50)AS EXTERNAL NAME HebrewDateConverter.[HebrewDateConverter.HebrewDateConverter].ConvertToHebrewDate;שימי לב להחליף את C:\path\to\HebrewDateConverter.dll בנתיב האמיתי לקובץ ה-DLL שלך.
תשתמשי ב-UDF בשאילתת SQL כדי להמיר תאריך גרגוריאני לתאריך עברי:
SELECT dbo.ConvertToHebrewDate('2023-05-02') AS HebrewDate;
השאילתה תחזיר לך התאריך העברי עבור התאריך הגרגוריאני של 2 במאי 2023:
לדוגמא:
Hebrew Date: 29 Nisan 5783
Log in to reply.