首页 > 解决方案 > 如何转换日期:2020 年 9 月 26 日星期六 00:15:00 在 oracle sql 中采用 YYYY/MM/DD HH24:MI:SS' 格式

问题描述

Sep 26 00:15:00 2020可以转换如下,但我怎样才能转换 Sat

SELECT 
  TO_CHAR(
    TO_DATE('Sep 26 00:15:00','Mon DD HH24:MI:SS')
  , 'YYYY-MM-DD HH24:MI:SS'
  )
FROM dual;

ORA-01843: 无效的月份

标签: sqloracledate

解决方案


您的数据库语言无法识别“Sep”(九月)。

我的会说克罗地亚语,所以这个查询对我也不起作用:

SQL> SELECT TO_CHAR( TO_DATE('Sep 26 00:15:00','Mon DD HH24:MI:SS') , 'YYYY-MM-DD HH24:MI:SS' ) FROM dual;
SELECT TO_CHAR( TO_DATE('Sep 26 00:15:00','Mon DD HH24:MI:SS') , 'YYYY-MM-DD HH24:MI:SS' ) FROM dual
                        *
ERROR at line 1:
ORA-01843: not a valid month

一种选择是更改会话并将语言设置为英语:

SQL> alter session set nls_date_language = 'english';

Session altered.

SQL> SELECT TO_CHAR( TO_DATE('Sep 26 00:15:00','Mon DD HH24:MI:SS') , 'YYYY-MM-DD HH24:MI:SS' ) FROM dual;

TO_CHAR(TO_DATE('SE
-------------------
2020-09-26 00:15:00

SQL>

另一种选择是将这些信息包含在TO_DATE函数中:

SQL> SELECT TO_CHAR( TO_DATE('Sep 26 00:15:00','Mon DD HH24:MI:SS', 'nls_date_language = english') , 'YYYY-MM-DD HH24:MI:SS' ) FROM dual;

TO_CHAR(TO_DATE('SE
-------------------
2020-09-26 00:15:00

SQL>

如果您想在结果中包含日期名称,请使用适当的格式掩码,例如

SQL> SELECT TO_CHAR( TO_DATE('Sep 26 00:15:00','Mon DD HH24:MI:SS') , 'Day, YYYY-MM-DD HH24:MI:SS' ) FROM dual;

TO_CHAR(TO_DATE('SEP2600:15:00','MONDDHH24:MI:SS'),'DAY,Y
---------------------------------------------------------
Saturday , 2020-09-26 00:15:00

SQL>

正如您坚持Sat(对于“星期六”)并且 - 由于某种原因 - 不想自己检查有效的格式掩码,然后

SQL> SELECT TO_CHAR( TO_DATE('Sep 26 00:15:00','Mon DD HH24:MI:SS') , 'Dy, YYYY-MM-DD HH24:MI:SS' ) FROM dual;

TO_CHAR(TO_DATE('SEP2600:15:00','
---------------------------------
Sat, 2020-09-26 00:15:00

SQL>

推荐阅读