Oracle to_date SQL تنسيق السلوك الفردي
سؤال
لقد صمدت موقع الويب SO معتقدين أن هذا واضح جدًا ، لكن للأسف لم أجد واحدة بعد. في الأساس الإعداد كما يلي:
لدي سلسلة في جدول مثل ذلك:
06/22/2010 00:00:00
أفعل ذلك:
SELECT To_Date(item, 'MM/DD/YYYY HH24:MI:SS') from that_table
لذلك أفعل ذلك بفعالية
SELECT To_Date('06/22/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS') from that_table
عودة قاعدة البيانات الخاصة بي:
22.06.2010 00:00:00
الآن أعلم أنه يمكنني فعل ملف
to_char(to_Date('06/22/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 'MM/DD/YYYY HH24:MI:SS')
لكنني بحاجة إلى تحديد تنسيق تاريخ (MM/DD/YYYY HH24:MI:SS
) وليس سلسلة. كيف أقوم بذلك؟
يحرر:الإخراج الحقيقي:
22.06.2010 00:00:00
الإخراج المطلوب (في تنسيق التاريخ):
06/22/2010 00:00:00
المحلول
التاريخ هو نقطة الوقت ، وليس له تنسيق (مثل الأرقام: ليس لديهم تنسيق). عند عرض التاريخ ، من الواضح أنه يجب أن تحصل على تنسيق: إذا لم تقم بمنح Oracle على وجه التحديد تنسيقًا ، فسيتم استخدام التنسيق الافتراضي لجلستك (معلمة الجلسة NLS_DATE_FORMAT).
نتيجة: استخدم نوع بيانات التاريخ لحساب التاريخ والتخزين (بدون تنسيق). استخدم ال to_char
وظيفة أو شيء مكافئ عندما تحتاج إلى عرض التاريخ (في تقرير أو في واجهة المستخدم الرسومية).
نصائح أخرى
لا يحتوي التاريخ على تنسيق ، يتم تنسيقه فقط عند تحويله إلى سلسلة أحرف لأغراض العرض. إذا كنت تستخدم SQL Plus ، عند عرض عمود تاريخ (دون استخدام TO_CHAR لتنسيقه بشكل صريح) ، يقوم SQL Plus نفسه بتحويل TO_CHAR باستخدام إعداد NLS_DATE_FORMAT:
SQL> select sysdate from dual;
SYSDATE
---------
23-JUN-10
SQL> alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
2010-06-23 15:17:12
إذا كنت لا تستخدم SQL Plus ، فما هي الأداة التي تستخدمها ستقوم بشيء مماثل وقد يكون لها طريقة مختلفة لتحديد تنسيق التاريخ للعرض.