【问题标题】:Oracle Insert from TH Date FormatOracle 从日期格式插入
【发布时间】:2014-11-19 08:03:12
【问题描述】:

我有日期格式的数据

2010 年 11 月 2 日 2013 年 3 月 15 日——以此类推。

我需要提取这些数据并插入到 DATE 类型的字段中。

我怎样才能做到这一点?

【问题讨论】:

    标签: oracle date format


    【解决方案1】:

    select to_char(sysdate,'ddth Month YYYY','NLS_DATE_language=American') from dual

    输出: 2014 年 11 月 19 日

    select to_date('15th Mar 2013','dd"th" Mon YYYY','NLS_DATE_language=American') from dual 用于将 varchar 转换为日期格式。

    希望能帮到你。

    【讨论】:

    • 它给出了一个错误 ORA-01861: literal does not match format string on select to_date('15th Mar 2013','ddth Mon YYYY','NLS_DATE_language=American') from dual
    • 请尝试 to_date('15th Mar 2013','dd"th" Mon YYYY','NLS_DATE_language=American')
    【解决方案2】:

    您只需要将字符串转换为具有适当格式掩码的日期:

    insert into your_table values (
        to_date('2nd November 2010', 'ddth Month YYYY')
    ) 
    

    文档包含格式模型的完整列表。 Find out more.

    但是,您遇到了问题,因为您的输入具有不同的格式。我们不能使用相同的掩码来匹配 NOVEMBER 和 MAR;第二个日期需要'ddth Mar YYYY' 的掩码。

    所以你需要编写一个函数来捕获ORA-01861: literal does not match format string 并应用不同的掩码;根据输入数据的质量,您可能需要其中几个。这种情况在不使用强数据类型的应用程序中很常见,因此在与更严格的系统交互时需要数据清理。

    【讨论】:

    • 我会将 cast 替换为 convert 因为 CAST 也存在于 Oracle 中,并且其行为方式与 to_date 不太一样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多