واسمحوا لي أن أعرف المشكلة مع استعلام SQL التالية
سؤال
SELECT pd_end_dt,nrx_cnt
FROM wkly_lnd.lnd_wkly_plan_rx_summary
WHERE pd_end_dt >TO_DATE('01/01/2009')
إنه إعطاء خطأ ORA-01843: ليس شهرا صالحا
ركضت ما يلي فعل غرامة
حدد pd_end_dt، nrx_cnt من wkly_lnd.lnd_wkly_plan_rx_summary حيث pd_end_dt> '01 -jan-09 '
ولكن إذا أردت أن يكون لديك بيانات حكيمة الأسبوع كيفية القيام DAT
لا يوجد حل صحيح
نصائح أخرى
أنت لا تعطي سلسلة تنسيق ل حتي اليوم. وبعد قد يتسبب هذا في التعامل مع Oracle في تاريخك. يحاول
to_date('01/01/2009', 'DD/MM/YYYY')
بدلا من ذلك (اعتمادا على المكان الذي تكون فيه، قد ترغب في تغيير ترتيب DD و MM). يرى هذا الوصف للجدية TO_DATE تنسيق سلسلة للتفاصيل.
يحاول
TO_DATE('01/01/2009', 'dd/mm/yyyy')
حسنا، لا يبدو قاسيا، ولكن قم بتفتيش Google أولا. الإجابات السابقة تعمل، ولكن لشرح مزيد من التفسير
http://www.dbmotive.com/oracle_error_codes.php؟arrcode=01843.
إذا كنت ستستخدم التنسيق الافتراضي كما تفعل، فعليك معرفة ما هو الأول
هناك احتمالان:
الفشل الوظيفة To_Date بسبب تنسيق التاريخ الافتراضي (حسب الإجابات الأخرى المقدمة بالفعل هنا).
العمود
pd_end_dt
ليس عمود تاريخ. يحاول الاستعلام تحويل القيم فيpd_end_dt
للتواريخ قبل المقارنة، وفشلت في أحد الصفوف.
لتوضيح:
SQL> create table t1 (datestrings varchar2(10));
SQL> insert into t1 values ('01/01/2009');
SQL> insert into t1 values ('02/01/2009');
SQL> insert into t1 values ('01/XX/2009');
SQL> select * from t1 where datestrings > '01/01/2009';
DATESTRINGS
-----------
02/01/2009
01/XX/2009
2 rows selected
SQL> select * from t1 where datestrings > TO_DATE('01/01/2009');
ORA-01843: not a valid month
SQL> select * from t1 where datestrings > TO_DATE('01/01/2009','DD/MM/YYY');
ORA-01843: not a valid month