PostgreSQL如何从字符串日期中获取日期格式?
嘿,这个场景我太熟悉了!导入数据时各种日期格式乱入确实头疼,不过PostgreSQL有几个实用的函数能帮你轻松搞定char字段转日期的问题,我给你整理两种常用方法:
方法1:用
TO_DATE()精准匹配格式 TO_DATE()是PostgreSQL处理字符串转日期的基础函数,你只需要给它指定对应格式的掩码,就能准确解析:
- 针对
YYYY-MM-DD格式(比如2018-01-30):
SELECT TO_DATE(my_date, 'YYYY-MM-DD') AS parsed_date FROM your_table;
- 针对
DD.MM.YYYY格式(比如30.01.2018):
SELECT TO_DATE(my_date, 'DD.MM.YYYY') AS parsed_date FROM your_table;
如果你的字段里同时混着这两种格式,可以用CASE语句做个判断,分情况处理:
SELECT CASE WHEN my_date LIKE '%.%' THEN TO_DATE(my_date, 'DD.MM.YYYY') WHEN my_date LIKE '%-%' THEN TO_DATE(my_date, 'YYYY-MM-DD') ELSE NULL -- 对无法识别的格式返回NULL,也可以根据需求自定义处理 END AS parsed_date FROM your_table;
方法2:用
TRY_TO_DATE()自动兼容多格式(PostgreSQL 12+) 如果你的PostgreSQL版本是12或更高,那TRY_TO_DATE()绝对是懒人福音!它会依次尝试你给出的多个格式模板,能匹配就返回日期,匹配失败也不会报错,直接返回NULL:
SELECT TRY_TO_DATE(my_date, 'YYYY-MM-DD,DD.MM.YYYY') AS parsed_date FROM your_table;
这个函数省去了写复杂CASE的麻烦,适合字段里格式比较固定但有多种的情况。
小提示
- 要是字段里还有其他奇奇怪怪的日期格式,只需要给
TRY_TO_DATE()添加对应的模板,或者扩展CASE的判断条件就行。 - 转换后的结果是标准
DATE类型,后续做排序、日期计算都非常方便。
内容的提问来源于stack exchange,提问作者Deval




