【问题标题】:How to convert date : Sep 26 00:15:00 2020 in YYYY/MM/DD HH24:MI:SS' format in oracle sql如何在 oracle sql 中转换日期:2020 年 9 月 26 日 00:15:00 YYYY/MM/DD HH24:MI:SS' 格式
【发布时间】:2020-09-26 11:58:04
【问题描述】:

转换时出错

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 .

寻找解决方案

【问题讨论】:

    标签: sql oracle date


    【解决方案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>
    

    【讨论】:

    • 我得到的日期是 Sat Sep 26 00:29:00 2020 ,如何将其转换为所需的格式
    【解决方案2】:

    使用TO_DATE(),您希望将字符串 - 'Sep 26 00:15:00' 转换为 Oracle DATE 类型 - 该类型在内部计算自纪元日期以来的秒数。

    在 Unix 中,这将是 '1970-01-01 00:00:00',在我知道的其他一些数据库中是 '2000-01-01 00:00:00'。我不了解甲骨文。

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

    您使用的第二个参数在这种情况下绝对没有意义。如果你想玩,你可以使用它重新格式化转换后的DATE 类型,回到 ISO 格式的字符串,使用TO_CHAR()

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

    【讨论】:

    • “这是一种在内部计算自纪元日期以来的秒数的类型。”这是不正确的; DATE 数据类型为 7 个字节,分别代表世纪、世纪、月、日、小时、分钟和秒。
    • 所以 Oracle 不仅在数字上是独一无二的,而且在日期时间类型上也是独一无二的。感谢分享
    • 我得到的日期是 Sat Sep 26 00:29:00 2020 ,如何将其转换为所需的格式
    • 该格式为:3 字母英文。 weekdayname,空格,3 个字母的英文。月份名称、空格、日-日、冒号、分钟-分钟、冒号、秒-秒、年,所以:'Dy Mon DD HH24:MI:SS YYYY'。我在这里找到了一个很好的文档:livesql.oracle.com/apex/livesql/file/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2021-06-23
    • 2015-02-03
    • 2022-07-19
    • 2020-08-28
    相关资源
    最近更新 更多