在Postgresql中转换部分日期

时间:2016-04-06 16:05:55

标签: postgresql datetime missing-data to-date str-to-date

我有一个包含birthdate属性的数据集。日期格式为M/D/YYYY(单位数表示,如5/8/2009),并以文本格式存储。现在,我需要将列类型更改为date。但是,有许多实体(超过可以手动修复的实体)具有部分日期 - 也就是说,缺少日期或日期和月份。例如:

"//1935"
"/5/1929"
"/4/1931"

现在,当我应用to_date(birthdate,'DD/MM/YYYY')时,我收到错误,因为Postgresql无法解析这些日期。我需要做的是用默认值填充缺失值。例如,"//1935""/5/1929"应分别转换为"1/1/1935""1/5/1929"。有没有快速解决这个问题的方法?或者,我是否需要编写正则表达式解析器?

1 个答案:

答案 0 :(得分:1)

<强> SQL Fiddle Demo

CREATE TABLE product
    ("inputDate" varchar(9))
;

INSERT INTO product
    ("inputDate")
VALUES
    ('//1935'),
    ('/5/1929'),
    ('/4/1931')
;

SELECT *,
       CASE WHEN substr("inputDate", 1, 2) = '//' THEN '1/1/' || substr("inputDate", 3, 10)
            WHEN substr("inputDate", 1, 1) = '/' THEN '1/' || substr("inputDate", 2, 10)
            ELSE "inputDate"
       END as result
FROM Product;