【发布时间】:2012-05-30 23:36:14
【问题描述】:
假设我们有一个名为 MyDate 的 VARCHAR2 列
假设它包含以下值:
13/02/2001
2001 年第 13 代
我必须将此字段转换为 DATE 值。但 TO_DATE 在某些值或其他值上失败。
TO_DATE(MyDate, 'DD/MM/YYYY')
如何转换?
【问题讨论】:
假设我们有一个名为 MyDate 的 VARCHAR2 列
假设它包含以下值:
13/02/2001
2001 年第 13 代
我必须将此字段转换为 DATE 值。但 TO_DATE 在某些值或其他值上失败。
TO_DATE(MyDate, 'DD/MM/YYYY')
如何转换?
【问题讨论】:
SELECT CASE
WHEN REGEXP_LIKE(mydate, '\d{2}/\d{2}/\d{4}') THEN
TO_DATE(mydate, 'DD/MM/YYYY')
WHEN REGEXP_LIKE(mydate, '\d{2}-[a-z]{3}-\d{4}') THEN
TO_DATE(mydate, 'DD-MON-YYYY')
END
FROM mytable
【讨论】:
你可以这样写
CASE WHEN instr(labour_contract_expiry, '-') > 0 THEN
to_date(LABOUR_CONTRACT_EXPIRY,'DD-MON-RRRR')
ELSE
to_date(LABOUR_CONTRACT_EXPIRY,'DD/MM/RRRR')
END,
【讨论】:
至少你可以做类似的事情
CASE WHEN REGEXP_LIKE(YOUR_COLUMN,'\d{2}/\d{2}/\d{4}' THEN TO_DATE(MyDate, 'DD/MM/YYYY')
WHEN REGEXP_LIKE(YOUR_COLUMN,'\d{2}-\D{,3}-\d{4}' THEN TO_DATE(MyDate, 'DD-MON-YYYY')
WHEN ...
等等
【讨论】: