如何转换日期:oracle sql中YYYY / MM / DD HH24:MI:SS'格式的2020年9月26日星期六:15:00

时间:2020-09-26 17:39:00

标签: sql oracle date

realloc可以按以下方式转换,但是如何转换星期六

Sep 26 00:15:00 2020

ORA-01843:无效月份

2 个答案:

答案 0 :(得分:2)

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

我的语言是克罗地亚语,因此该查询对我也不起作用:

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>

答案 1 :(得分:1)

使用Dy格式模型:

SELECT TO_CHAR(
         TO_DATE(
           'Sat Sep 26 00:15:00',
           'Dy Mon DD HH24:MI:SS',
           'NLS_DATE_LANGUAGE = English'
         ),
         'YYYY-MM-DD HH24:MI:SS'
       ) AS formatted_date
FROM   DUAL;

哪个输出:

| FORMATTED_DATE      |
| :------------------ |
| 2020-09-26 00:15:00 |

db <>提琴here