واسمحوا لي أن أعرف المشكلة مع استعلام SQL التالية

StackOverflow https://stackoverflow.com/questions/1326502

  •  19-09-2019
  •  | 
  •  

سؤال

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.

إذا كنت ستستخدم التنسيق الافتراضي كما تفعل، فعليك معرفة ما هو الأول

هناك احتمالان:

  1. الفشل الوظيفة To_Date بسبب تنسيق التاريخ الافتراضي (حسب الإجابات الأخرى المقدمة بالفعل هنا).

  2. العمود 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top