日期数据中的异常

时间:2017-04-15 07:00:38

标签: date plsql

我有一个数据集,其中有一个标题为' Document_Date'目前格式为VARCHAR。此列中的日期主要采用DDMMYYYY格式,但197行除外,其中日期采用奇怪的格式,如下所示' 0116-11-26'。

我目前无法映射此数据,因为to_date函数出现错误' ORA-01858:找到了一个非数字字符,其中数字是预期的'我怀疑是因为日期的破折号。我还尝试使用Case语句将异常映射为to_date(' 0016-10-19',' YYYYMMDD')以及其他所有内容为' DDMMYYYY&# 39;但这会产生同样的错误。

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

1 个答案:

答案 0 :(得分: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'日期失败的原因,您可能使用了错误的格式掩码。在调用YYYY-MM-DD时,您应该使用掩码TO_DATE()连字符。