我有一个数据集,其中有一个标题为' 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?
答案 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()
,和连字符。