2018-07-01

كيفية كتابة الوقت التاريخ Date Time بحيث لا يتاثر بلغة السكويل سيرفر SQL Server

عند كتابة كويري به شرط على حقل يحتوي على تاريخ  Date  او تاريخ ووقت  DateTime  مثل الكويري بالأسفل

Select Id, FirstName, HireDate  From Employee
Where
HireDate>='05-06-2018'

كيف تتوقع ان يترجم SQL Server هذا التاريخ  هل يترجمه على انه الخامس من شهر يونيو ام السادس من شهر مايو
اي هل هو يوم - شهر - سنة  ام شهر - يوم - سنة.
  هذا يتوقف على اللغة الافتراضية Default Language فى السكويل سيرفر SQL Server.

لو كانت اللغة الافتراضية Default Language فى سكويل سيرفر SQL Server هو US_English  فسيكون الفورمات الذي يستعمله سكويل سيرفر عند تحويل اى نص إلى تاريخ هو MM-DD-YYYY اي شهر- يوم - سنة اي سيفهم السكويل سيرفر التاريخ على انه السادس من شهر مايو.




اما لو كانت اللغة الافتراضية Default Language فى سكويل سيرفر SQL Server هو  British فسيكون الفورمات الذي يستعمله سكويل سيرفر عند تحويل اى نص إلى تاريخ هو DD-MM-YYYY اي يوم-شهر- سنة اي سيفهم السكويل سيرفر التاريخ على انه الخامس من شهر يونيو.


ولو كانت اللغة الافتراضية Default Language فى سكويل سيرفر SQL Server هو Arabic  فسيكون الفورمات الذي يستعمله سكويل سيرفر عند تحويل اى نص إلى تاريخ هو DD-MM-YYYY اي شهر- يوم - سنة و لكن بالتاريخ الهجري اى سيفهما لسكويل سيفر التاريخ على انه الخامس من شهر جمادي الثاني.


يمكن التغلب على هذه المشكلة باى من الطرق الاتيه

  1.  كتابة التاريخ بفورمات لا يتاثر بلغة السكويل سيرفر SQL Server 

    كتابة التاريخ و الوقت بالأيزو  ISO فورمات و هذا الفورمات لايتاثر باللغة الافتراضية Default Language  للسكويل سيرفر SQL Server. و هذا الفورمات على شكل  yyyy-mm-ddThh:mi:ss.mmm اى سنه - شهر - يوم T ساعات:دقائق:ثواني بدون أى مسافات و بذلك يفهم SQL Server التاريخ و الوقت كما هوا مكتوب و لا يحدث اخلاف بين الايام و الشهور و السنين.

  2. و يمكن ايضا عند كتابة تاريخ فقط ان يتم كتابتة على شكل YYYYMMDD بدون اى فواصل او مسافات و هنا يفهم السكويل سيرفر SQL Server النص المكتوب على انه التاريخ المظبوط بغض النظر عن اللغة الافتراضية Default Language و يعتبر الوقت الساعة 12:00 AM  و بذلك يمكن كتابة الكويري بالأعلى على الصورة التالية و ذلك ليفهم السكويل سيرفر SQL Server التاريخ على انه الخماس من شهر يونيو
    Select Id, FirstName, HireDate  From Employee
    Where
    HireDate>='20180605'
    او 
    Select Id, FirstName, HireDate  From Employee
    Where
    HireDate>='2018-06-05T00:00:00.000'
  3. ضبط فورمات التاريخ و الوقت الخاص بجلسة الاتصال Session

    يمكن اخبار السكويل سيرفر SQL Server عن الفورمات المطلوب ان يعتبره عن تحويل النصوص إلى تاريخ و وقت و ذلك عن طريق الجمله التالية
    Set dateformat dmy
    هذه الجملة تخبر سكويل سيرفر SQL Server ان يفهم النصوص على شكل التاريخ على انها مكتوبة على فورمات  DD-MM-YYYY اى يوم- شهر- سنه و لكن تاثير هذه الجملة ينتهي بمجرد قطع الاتصال مع سكويل سيرفر و يجب تنفيذها كل مرة نقوم فيها بالاتصال مره اخري
    في المثال التالي يظهر كيف تم تغيير الفورمات بعد استعمال جملة Set DateFormat dmy. 
و فى النهاية في انتظار ارائكم و تعليقاتكم

هناك تعليقان (2):

  1. ما شاء الله شرح جميل ومبسط ومفيد وفعلا انا استفدت جدا من هذا الموضوع انا واجهتنى هذة المشكلة ولم اكن اعلم هذا الحل جزاك الله خيرا واتمنى ان تستمر فى هذة المقالات

    ردحذف

الموضوع المميز

تاثير استعمال Like على Performance الكويري في SQL Server

  نفترض كويري كما بالأسفل Select Id, FirstName, LastName,  JobDescription  From Employee where FristName Like '%hm%'

أكثر المواضيع زيارة