it-swarm.dev

استعلام Oracle SQL لتنسيق التاريخ

أشعر دائمًا بالارتباك مع تنسيق التاريخ في استعلام Oracle SQL وقضاء دقائق معًا في google ، هل يمكن لأي شخص أن يشرح لي أبسط طريقة للتعامل عندما يكون لدينا تنسيق مختلف للتاريخ في جدول قاعدة البيانات؟

على سبيل المثال ، لدي عمود تاريخ باسم ES_DATE ، يحمل البيانات كـ 27-APR-12 11.52.48.294030000 AM من نوع البيانات TIMESTAMP (6) WITH LOCAL TIME ZONE.

enter image description here

لقد كتبت استعلام تحديد بسيط لجلب البيانات لهذا اليوم بالذات ولا يعيدني شيء. هل يمكن لأي شخص أن يشرح لي؟

select * from table
where es_date=TO_DATE('27-APR-12','dd-MON-yy')

أو

select * from table where es_date = '27-APR-12';
20
user2246725

to_date() تُرجع تاريخًا في الساعة 00:00:00 ، لذلك تحتاج إلى "إزالة" الدقائق من التاريخ الذي تقارن فيه بـ:

select * 
from table
where trunc(es_date) = TO_DATE('27-APR-12','dd-MON-yy')

ربما تحتاج إلى إنشاء فهرس على trunc(es_date) إذا كان هذا شيء تقوم به بشكل منتظم.

يمكن أن تفشل الحرفي '27-APR-12' بسهولة بالغة إذا تم تغيير تنسيق التاريخ الافتراضي إلى أي شيء مختلف. لذلك تأكد من أنك تستخدم دائمًا to_date() مع قناع تنسيق مناسب (أو حرف ANSI: date '2012-04-27')

على الرغم من أنك فعلت ذلك بشكل صحيح في استخدام to_date() وعدم الاعتماد على تحويل نوع بيانات التورط ، إلا أن استخدامك لـ to_date () لا يزال يحتوي على ملف دقيق بسبب التنسيق 'dd-MON-yy'.

مع إعداد لغة مختلفة ، قد يفشل هذا بسهولة على سبيل المثال TO_DATE('27-MAY-12','dd-MON-yy') عند ضبط NLS_LANG على الألمانية. تجنب أي شيء في التنسيق الذي قد يكون مختلفًا بلغة مختلفة. استخدام عام مكون من أربعة أرقام وأرقام فقط ، على سبيل المثال 'dd-mm-yyyy' أو 'yyyy-mm-dd'

42
a_horse_with_no_name

إذا كنت تستخدم تنسيق التاريخ نفسه وكان لديك تحديد استعلام حيث التاريخ في Oracle:

   select count(id) from Table_name where TO_DATE(Column_date)='07-OCT-2015';

To_DATE مقدمة من Oracle

2
abhishek ringsia