在 postgresql 的原始文本列中投射具有多种日期格式的列 to_date

cast column to_date with multiple date formats in original text column in postgresql

我有一个 table 和一个 event_date text 列,其值遵循两种日期格式之一:

  1. 'YYYYMMDD'
  2. 'YYYY-MM-DD'

例如:

event_date: text
1991-04-01
2009-02-11
20010101
NULL
20020101

如何将该列解析为 Date 格式?

特别是考虑到 TO_DATE() 将只采用一种可能的格式

两种格式都将转换为日期:

SELECT event_date::date event_date
FROM tablename;

或使用 CASE 表达式来选择两种格式之一:

SELECT TO_DATE(
         event_date,
         CASE
           WHEN event_date LIKE '____-__-__' THEN 'YYYY-MM-DD'
           WHEN event_date LIKE '________' THEN 'YYYYMMDD'
         END
       ) event_date
FROM tablename;

参见demo