1

我需要一点帮助,我在 COL1 列中有一个格式如下的日期字段

COL1

yyyy-MM-dd
dd-MMM-yy
ddMMMYYYY

我的查询是

    case WHEN ("COL1" like '%-%') THEN to_localdate('yyyy-MM-dd', "COL1")  
    WHEN ("COL1" like '%-%') THEN to_localdate('dd/MMM/yy', "COL1") 
    ELSE to_localdate('ddMMMyyyy', "COL1") END AS COL1

我不确定如何在我的案例陈述中处理 dd-MMM-yy 字段。

谢谢,

注意:我正在使用 Oracle 并在 denodo 上运行查询。但这只是 SQL 案例语句。所以它应该在任何地方都有效。

4

2 回答 2

3

假设该列包含有效的格式化日期,请使用_表示单个字符的通配符:

CASE 
  WHEN ("COL1" LIKE '____-__-__') THEN to_localdate('yyyy-MM-dd', "COL1")  
  WHEN ("COL1" like '__/___/__') THEN to_localdate('dd/MMM/yy', "COL1") 
  ELSE to_localdate('ddMMMyyyy', "COL1") 
END AS COL1
于 2021-05-18T15:13:40.883 回答
0

您可以使用regexp_like(). 我认为这是逻辑:

(case when regexp_like('^[0-9]{4}-[0-9]{2}-[0-9]{2}$' 
     then to_localdate('yyyy-MM-dd', COL1) 
     when regexp_like('^[0-9]{2}-[a-zA-Z]{3}-[0-9]{2}$' 
     then to_localdate('dd-MMM-rr', COL1) 
     when regexp_like('^[0-9]{2}[a-zA-Z]{3}[0-9]{2}$' 
     then to_localdate('ddMMMrr', COL1) 
end)
于 2021-05-18T15:11:50.173 回答