sql - ORA-01843 : not a valid month with data type conversion

标签 sql oracle date-formatting

我创建了一个 View ,其中列命令之一是:

TO_CHAR( TO_DATE(sysdate ||' '||TIMING.TIME,'dd-MON-RRRR HH:MIAM'),'dd-MON-RRRR HH:MIAM') as time

TIMING.TIME 的值如下所示:09:30AM as varchar2

当我运行查询时:从 View 中选择 TO_DATE(time,'DD-MON-RRRR HH:MIAM')

我收到错误

ORA-01843: not a valid month

NLS 语言是美国语言。

最佳答案

TO_DATE(sysdate

这是错误的。

切勿对DATE数据类型应用TO_DATE。它迫使 Oracle:

  • 首先将其转换为字符串
  • 然后将其转换回日期

基于特定于区域设置的 NLS 设置。您需要 TO_DATE 将文字转换为日期。对于日期算术,保留日期不变。

如果您尝试配置当前日期的时间部分,则: 1.首先将日期转为字符串 2.然后将时间部分连接到字符串 3. 最后申请TO_DATE

例如,

SQL> alter session set nls_date_format='DD-MM-YYYY HH:MI:SS AM';

Session altered.

SQL> SELECT to_date(TO_CHAR(sysdate, 'mm/dd/yyyy')
  2    ||' '
  3    ||'09:30AM', 'mm/dd/yyyy hh:miAM') TIME
  4  FROM dual;

TIME
----------------------
14-10-2015 09:30:00 AM

记住,

  • TO_DATE 用于将字符串转换为日期。
  • TO_CHAR 用于以所需的字符串格式显示日期。

为您修改的查询:

to_date(TO_CHAR(sysdate, 'mm/dd/yyyy') ||' ' ||TIMING.TIME, 'mm/dd/yyyy hh:miAM')
AS "TIME"

关于sql - ORA-01843 : not a valid month with data type conversion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33120096/

相关文章:

java - 单击按钮打开一个新的 JTable

sql - 使用 PL/SQL 将值插入全局临时表

sql - 将一列拆分或子化为多列

Oracle默认的日期格式是YYYY-MM-DD,为什么?

java - 从 Angular 解析日期

sql - “丢失更新”与 'Write skew'

MySQL插入后自动将数据插入到另一张表中

oracle - 在 Liquibase sql 变更集中获取项目根目录

flash - 如何在 Flash 中格式化日期?

sql - PL/SQL 和 T-SQL 有什么区别?