sql - 如何转换日期: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: 无效的月份
解决方案
您的数据库语言无法识别“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>