سؤال

لقد صمدت موقع الويب 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 ، فما هي الأداة التي تستخدمها ستقوم بشيء مماثل وقد يكون لها طريقة مختلفة لتحديد تنسيق التاريخ للعرض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top