عند كتابة كويري به شرط على حقل يحتوي على تاريخ Date او تاريخ ووقت DateTime مثل الكويري بالأسفل
كيف تتوقع ان يترجم 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 اي شهر- يوم - سنة و لكن بالتاريخ الهجري اى سيفهما لسكويل سيفر التاريخ على انه الخامس من شهر جمادي الثاني.
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 اي شهر- يوم - سنة و لكن بالتاريخ الهجري اى سيفهما لسكويل سيفر التاريخ على انه الخامس من شهر جمادي الثاني.
يمكن التغلب على هذه المشكلة باى من الطرق الاتيه
كتابة التاريخ بفورمات لا يتاثر بلغة السكويل سيرفر SQL Server
كتابة التاريخ و الوقت بالأيزو ISO فورمات و هذا الفورمات لايتاثر باللغة الافتراضية Default Language للسكويل سيرفر SQL Server. و هذا الفورمات على شكل yyyy-mm-ddThh:mi:ss.mmm اى سنه - شهر - يوم T ساعات:دقائق:ثواني بدون أى مسافات و بذلك يفهم SQL Server التاريخ و الوقت كما هوا مكتوب و لا يحدث اخلاف بين الايام و الشهور و السنين.ضبط فورمات التاريخ و الوقت الخاص بجلسة الاتصال Session
يمكن اخبار السكويل سيرفر SQL Server عن الفورمات المطلوب ان يعتبره عن تحويل النصوص إلى تاريخ و وقت و ذلك عن طريق الجمله التاليةSet dateformat dmy
في المثال التالي يظهر كيف تم تغيير الفورمات بعد استعمال جملة Set DateFormat dmy.
و يمكن ايضا عند كتابة تاريخ فقط ان يتم كتابتة على شكل 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'
و فى النهاية في انتظار ارائكم و تعليقاتكم
ما شاء الله شرح جميل ومبسط ومفيد وفعلا انا استفدت جدا من هذا الموضوع انا واجهتنى هذة المشكلة ولم اكن اعلم هذا الحل جزاك الله خيرا واتمنى ان تستمر فى هذة المقالات
ردحذفجزاك الله كل خير
ردحذف