【问题标题】:Anomalies in date data日期数据异常
【发布时间】:2017-04-15 15:14:45
【问题描述】:

我有一个数据集,其中有一个标题为“Document_Date”的列,该列当前格式化为 VARCHAR。此列中的日期大多采用 DDMMYYYY 格式,但 197 行中的日期采用类似于“0116-11-26”的奇怪格式。

我目前在映射此数据时遇到问题,因为 to_date 函数出现错误“ORA-01858:在预期数字的地方发现了一个非数字字符”,我怀疑这是因为日期中的破折号.我还尝试使用 Case 语句将异常映射为 to_date('0016-10-19', 'YYYYMMDD') 并将其他所有内容映射为 'DDMMYYYY' 但这会出现相同的错误。

我有没有办法将这些异常日期转换为“DDMMYYYY”格式(即,如果日期为“0116-11-26”,则将其转换为 26/11/0116)并转换所有正确格式日期为 DD/MM/YYYY?

【问题讨论】:

    标签: date plsql


    【解决方案1】:

    您应该能够为那些罕见的日期以不同的格式使用不同的格式掩码。像这样的:

    SELECT
        CASE WHEN REGEXP_LIKE(col, '\d{4}-\d{2}-\d{2}')
             THEN TO_DATE(col, 'YYYY-MM-DD')
             ELSE TO_DATE(col, 'DDMMYYYY')
        END AS new_date
    FROM yourTable
    

    至于为什么您当前尝试转换 '0016-10-19' 日期失败,您可能使用了错误的格式掩码。在调用TO_DATE() 时,您应该使用掩码YYYY-MM-DD带有 连字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-28
      • 2023-03-22
      • 2022-01-01
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      相关资源
      最近更新 更多