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

时间:2020-09-26 11:58:04

标签: sql oracle date

转换时出错

select to_date('Sep 26 00:15:00','DD/MM/YYYY HH24:MI:SS') from dual ;

ORA-01841: (full) year must be between -4713 and +9999, and not be 0 .

寻找解决方案

2 个答案:

答案 0 :(得分:1)

如何?当然,通过提供正确的格式掩码。

SQL> select
  2    to_char(
  3            to_date('Sep 26 00:15:00 2020', 'Mon dd hh24:mi:ss yyyy'),
  4            'yyyy/mm/dd hh24:mi:ss'
  5           ) result
  6  from dual;

RESULT
-------------------
2020/09/26 00:15:00

SQL>

答案 1 :(得分:0)

使用TO_DATE(),您想要将字符串-'Sep 26 00:15:00'转换为Oracle DATE类型-该类型在内部计算从开始日期起的秒数。

在Unix中,这将是“ 1970-01-01 00:00:00”,在其他一些数据库中,我知道是“ 2000-01-01 00:00:00”。我不了解Oracle。

因此,您将转换字符串:'Sep 26 00:15:00'。即:三个字母的英文月份名称缩写,一个空格,一个两位数的日期,一个空格,两位数字(表示24小时的小时数),冒号,两位代表分钟,另一个冒号以及两位代表第二。准确地说,这一年什么都没有。 TO_DATE()的第二个参数必须描述该格式。因此它将是:'Mon DD HH24:MI:SS'

在这种情况下,您使用的第二个参数绝对没有意义。如果要播放,可以使用DATE将其重新格式化为转换后的TO_CHAR()类型,并重新格式化为ISO格式的字符串:

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