首页 > 解决方案 > SQL ORA-01843 不是有效月份

问题描述

SQL> select Users.name , Users.surname , Users.email from Users
  2  inner join  Login_History on Login_History.user_id=Users.user_id where
  3  Login_History.entry_date=TO_DATE('01/12/2020','dd/mm/yyyy');
Login_History.entry_date=TO_DATE('01/12/2020','dd/mm/yyyy')

ERROR at line 3:
ORA-01843: not a valid month

在第 3 行,我想得到 where 的结果Login_History.entry_date=01/12/20 ;但是,它给出了无效的月份错误。

此代码在 SQL/Plus 中。

通过这种方式,我可以访问表中的一些数据。

标签: sqloracle

解决方案


我建议将查询编写为:

select u.name, u.surname, u.email
from Users u join
     Login_History lh
     on lh.user_id = u.user_id
 where lh.entry_date = date '2020-12-01';

请注意表别名的使用以及如何定义日期常量。

以上假设entry_date实际存储为date. 如果不是,您应该修复数据模型。 毕竟,日期应该存储为dates,而不是字符串。

如果它不是日期,而是 format 中的字符串dd/mm/yyyy,那么您可以简单地进行相等比较:

where lh.entry_date = '01/12/2020'

这适用于相等性,但不适用于大多数范围——因为字符串是存储日期的错误方式。


推荐阅读