קליטת תאריכים מתוך טקסט

08/02/2011

אין תגובות

בעבר כתבתי על כך שראוי שתאריכים יכתבו בצורה סטנדרטית, למשל התאריך של היום ראוי שיכתב בתור '20110208' כדי שלא יהיה ספק שמדובר בשמונה בפברואר ולא בשניים באוגוסט.

אם לעומת זאת נכתוב '2010-02-08' בשפות שונות הוא יובן באופנים שונים, כאשר השפה היא בראש ובראשונה שפת ברירת המחדל של השרת, מעליה שפת ברירת המחדל של ה-Login (אם היא שונה מזו של השרת- היא גוברת עליה), ומעל כולם השפה שהגדרנו ל-Session שפתחנו (בדרך כלל כולן זהות לזו של השרת ואין כל בעייה).

יחד עם זאת יש מקרים בהם התאריכים מתקבלים בצורה לא סטנדרטית, ו-SQL Server מגלה גמישות רבה בנכונותו לתרגם אותם לצורה תקנית; וזה שימושי בעיקר כשהנתונים מתקבלים ממערכות חיצוניות.

Select * From sys.sysLanguages;

clip_image002

טבלת sys.SysLanguages מציגה את ההגדרות של השפות השונות שנועדו לזהות שמות מקוצרים ומלאים של ימים וחודשים.

שפת ברירת המחדל במקומנו היא בדרך כלל US_English, אבל נניח שקיבלנו קובץ טקסט הכתוב בצרפתית דווקא:

Set Language Francais;

 

Select  Cast(N'fevr 8 2011' As DateTime),

        Cast(N'fevr 8 2011' As DateTime),

        Cast(N'fevrier 8 2011' As DateTime),

        Cast(N'fevrier 2011 8' As DateTime),

        Cast(N'8 fevrier 2011' As DateTime),

        Cast(N'8 2011 fevrier' As DateTime),

        Cast(N'2011 8 fevrier' As DateTime),

        Cast(N'2011 fevrier 8' As DateTime),

        Cast(N'fevr 8 2011' As DateTime),

        Cast(N'fevr 2011 8' As DateTime),

        Cast(N'8 fevr 2011' As DateTime),

        Cast(N'8 2011 fevr' As DateTime),

        Cast(N'2011 8 fevr' As DateTime),

        Cast(N'2011 fevr 8' As DateTime),

        Cast(N'2011-fevr-8' As DateTime);

שימו לב שאת כל המחרוזות האלו המערכת תצליח לתרגם נכון לשמונה בפברואר,

כאשר ניתן על פי הצורך לציין גם חלקי יממה (שעות, דקות, AM/PM..).

כמובן שיש למערכת גם מגבלות, למשל אם נכתוב fevrier במקום fevrier נקבל הודעת שגיאה.

לסיום נחזיר את שפת ברירת המחדל המקורית:

Set Language US_English;

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *