复杂日期列 case 语句

Complex date column case statement

我需要一点帮助,我在列 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

我不确定如何处理我的 case 语句中的 dd-MMM-yy 字段。

谢谢,

注意:我在 denodo 上使用 Oracle 和 运行 查询。但这只是 SQL 案例陈述。所以它应该无处不在。

您可以使用 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)

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

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