نظرة عامة
في بعض الاحيان نحتاج الي ادخال التاريخ وحفظه وفق صيغة معينة يقبلها السيكوال سيرفر وهي حفظ تاريخ او وقت بشكل معين
SQL Server Date Formats and Format date and DateTime in asp.net
وفي بعض الاحيان نحول التاريخ الي نوع نص كي يقبله السيكوال سيرفر او العكس
ففي بعض الاحيان عندما تقوم بحفظ التاريخ او الوقت تحدث مشكلة ويقول لك الاتي
cant Convert varchar to datetime
اي انه غير قادر علي تحويل النوع النصي الي نوع التاريخ
او يحفظ بشكل عادي كل شئ ولكنه يحفظ التاريخ علي انه عام 1900 وهو اول تاريخ او التاريخ الافتراضي .اي انه لم يحفظ اصلا التاريخ المدخل .
الحل
ان نحول التاريخ الي نوع نصي ثم نحفظه
اولا تعالوا نتفق علي فانكشن بداخل السيكوال سيرفر تعطيك تاريخ الوقت الحالي وهي
()GetDate
يوجد لديك نوعين
1- تحفظ تاريخ الوقت الحالي
2- تحفظ مدخل تاريخ في التكست بوكس او مدخل نصي
1- تحفظ تاريخ الوقت الحالي
تعالوا نكتب متغير نصي ونضع به التاريخ الحالي وهو كود بسيط .
string date = "CAST(CONVERT(varchar, GETDATE(), 103) AS DATETIME)";
المتغير الذي ستحفظه في جملة الادخال هي
date
كلمة كاست cast
تعني انني سوف احول من شئ الي شئ اخر .
الفانكش اسمها
getdate اعطتني تاريخ اليوم الحالي
والان حولت تاريخ اليوم الي نص ..واخيرا تم حفظها علي انها نوع تاريخ as Date Time
رقم 103 تعني ان التاريخ سوف يكون كالاتي يوم ثم شهر ثم عام
5/12/2012
الان واخيرا اذا حفظت احفظ فقط كلمة ال date
وسوف يتم الحفظ بدون مشاكل
insert into table(date_col)values (date);
2- تحفظ مدخل تاريخ في التكست بوكس او مدخل نصي
مثلا انت تكتب تاريخ بداخل تكست بوكس او تريد حفظ تاريخ بين علامات تنصيص ..فهذا يعتبر نوع نصي
تريد تحويله الان الي نوع تاريخ يقبله قاعدة البيانات .سوف تقول تستطيع عمل الاتي
DateTime.Parse(TextBox1.Text)
ولكن قد تعطي ايضا مشكلة
Cant Convert Varchar to DateTime
والان نريد عمل كاست او تحويل مناسب
string date = " CAST(''" + TextBox1.Text + "'' AS smalldatetime)";
مثل السابق ايضا قمت بتحويل النص الي تاريخ ليقبلها السيكوال سيرفر
وعندما تحفظ تضع فقط كلمة date
وبالطبع هنا لا نناقش جملة حفظ ..نناقش كيفية عمل كاست وتحويل للتاريخ كي نحفظه ..من فضلك راجع كود الحفظ في الصفحة .
ايضا يمكنك الاتي
string date = "CAST(CONVERT(varchar, ''" + TextBox1.Text + "'', 103) AS DATETIME)";
وكما قلنا منذ قليل رقم 103 تعني يوم ثم شهر ثم عام
هل يوجد كود بسيط يغير صيغة فورمات السيكوال سيرفر بعد تنصيبه
change Date Format after installing SQL server
يوجد هذا الكود طبعا افتح كويري جديدة في برنامج السيكوال سيرفر ثم اكتب الاتي
SET DATEFORMAT dmy;
اي اجعل التاريخ يوم شهر سنة
وتستطيع ايضا عمل الاتي
SET DATEFORMAT mdy
شهر يوم سنة
وهذا يدخلنا الان في صيغ التاريخ المختلفة
Formate Date styles
وهذا جدول يحتوي علي صيغ التاريخ في السيكوال سيرفر
Style Code | Style | Format | Example |
0 or 100 | Default. Equivalent to not specifying a style code. | mon dd yyyy hh:mmAM | Sep 8 2007 9:00PM |
1 | USA date. | mm/dd/yy | 09/08/07 |
2 | ANSI date. | yy.mm.dd | 07.09.08 |
3 | UK / French date. | dd/mm/yy | 08/09/07 |
4 | German date. | dd.mm.yy | 08.09.07 |
5 | Italian date. | dd-mm-yy | 08-09-07 |
6 | Abbreviated month. | dd mmm yy | 08 Sep 07 |
7 | Abbreviated month. | mmm dd, yy | Sep 08, 07 |
8 or 108 | 24 hour time. | HH:mm:ss | 21:00:00 |
9 or 109 | Default formatting with seconds and milliseconds appended. | mon dd yyyy hh:mm:ss:fffAM | Sep 8 2007 9:00:00:000PM |
10 | USA date with hyphen separators. | mm-dd-yy | 09-08-07 |
11 | Japanese date. | yy/mm/dd | 07/09/08 |
12 | ISO date. | yymmdd | 070908 |
13 or 113 | European default with seconds and milliseconds. | dd mon yyyy HH:mm:ss:fff | 08 Sep 2007 21:00:00:000 |
14 or 114 | 24 hour time with milliseconds. | HH:mm:ss:fff | 21:00:00:000 |
20 or 120 | ODBC canonical date and time. | yyyy-mm-dd HH:mm:ss | 2007-09-08 21:00:00 |
21 or 121 | ODBC canonical date and time with milliseconds. | yyyy-mm-dd HH:mm:ss.fff | 2007-09-08 21:00:00.000 |
101 | USA date with century. | mm/dd/yyyy | 09/08/2007 |
102 | ANSI date with century. | yyyy.mm.dd | 2007/09/08 |
103 | UK / French date with century. | dd/mm/yyyy | 08/09/2007 |
104 | German date with century. | dd.mm.yyyy | 08.09.2007 |
105 | Italian date with century. | dd-mm-yyyy | 08-09-2007 |
106 | Abbreviated month with century. | dd mmm yyyy | 08 Sep 2007 |
107 | Abbreviated month with century. | mmm dd, yyyy | Sep 08, 2007 |
110 | USA date with hyphen separators and century. | mm-dd-yyyy | 09-08-2007 |
111 | Japanese date with century. | yyyy/mm/dd | 2007/09/08 |
112 | ISO date with century. | yymmdd | 20070908 |
126 | ISO8601, for use in XML. | yyy-mm-ddThh:mm:ss | 2007-09-08T21:00:00 |