 
				
			
						תאריך בעברית ב SQL SERVER
קדם ‹ Forums ‹ הייטק ‹ Database Design & Development ‹ תאריך בעברית ב SQL SERVER
Tagged: תאריך
- 
		תאריך בעברית ב SQL SERVERפורסם ע"י צפורה ק.א. הייטק on 01/05/2023 ב2:24 pmשלום, האם יש לי דרך לדעת את התאריך העברי בתוך SQL? אני רוצה לבנות ג'וב קבוע שלא ירוץ בחגים – יש דרך למצוא את זה? תודה טליה שוורץ הגיבה לפני 2 שנים, 6 חודשים 4 חברות · 8 תגובות
- 
			8 תגובות
- 
קראתי על זה קצת, לכאורה הדרך הקלה ביותר היא למפות את המידע שלך לטבלה. כלומר- תעשי טבלה עם כל התאריכים הרלוונטיים + מה התאריך הלועזי של אותו תאריך, (כמה שנים קדימה, כמה שיותר – יותר טוב) ותבדקי בקוד שלך אם התאריך נמצא בטבלה הזו. יהיה מעניין לשמוע אם תמצאי רעיון טוב יותר! בהצלחה! 
- 
ציפי כן, את יכולה לקבוע את התאריך העברי ב-SQL באמצעות פונקציות לוח שנה בעברית שזמינות בחלק ממערכות ניהול מסדי הנתונים של SQL. לדוגמה, ל-Microsoft SQL Server יש פונקציה מובנית בשם "Hebrew_DateFromParts" שלוקחת את השנה, החודש והיום כפרמטרים ומחזירה את התאריך העברי המתאים. משאירה לך שאילתה לדוגמה המשתמשת בפונקציה הזו: SELECT dbo.Hebrew_DateFromParts(5783, 7, 29) as HebrewDate; 
- 
ארחיב עוד קצת, השאילתה מחזירה את התאריך העברי עבור התאריך הגרגוריאני של 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
- 
בדוגמה האחרונה, השאילתה פשוט בודקת אם התאריך של היום נמצא בטבלת "חגים", ואם כן, היא לא עושה כלום. אחרת, זה מפעיל את JOB. מקווה שעזרתי, בהצלחה! - 
תודה רבה על כל התגובות. ניסיתי לבדוק את הפונקציה הזו:Hebrew_DateFromParts אך הוא לא מכיר אותה , אני משתמשת ב SSMS 2018 גם באינטרנט לא מצאתי איזכור לזה – אולי תשלחי לי לינק איפה ראית את זה? האפשרות היא אכן למפות את המידע כמה שנים קדימה… או לעבור דרך אפליקצית NET – שם יש להם קלאס שמטפל בתאריכים עבריים – ולהפעיל את הפרוצדורה דרך שם ולא דרך ג'וב ב SQL. אם מישהי יודעת עוד משהו , אשמח לשמוע. 
 
- 
- 
לדעתי אל תמפי כמה שנים קדימה זה סיוט ולא כ"כ הגיוני לעבוד ככה.. הנה דוגמא למימוש של הפונקציה הזו להמרת תאריכים גרגוריאניים לתאריכים עבריים עם 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}"; } } } 
- 
המשך: תצרי קובץ 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.
 
		 
			 
					

