regex - 在 PostgreSQL 9.3 中更改 varchar 列中的日期格式

标签 regex postgresql

我有一个带有信息表的 PostgreSQL 数据库,其中包含有关人员的评论。

一个例子是 X 先生,1953 年 18 月 12 日出生在 Y...

我想使用独特的 PostgreSQL 请求或方法将日期格式更改为 ISO 8601 (YYYY-MM-DD)

我知道如何检测数据库中的日期:'(\d{2})/(\d{2})/(\d{4})'

使用此模式替换的最佳方法是什么?

我考虑过将 regex_replace 与拆分混合,但它似乎太复杂了,我相信有更简单的方法。

如果有人有好的建议,我会采纳!

谢谢

最佳答案

假设您的输入中有 XX/XX/XXXX 类似日期的子字符串,它始终是一个日期。然后,您可以使用的是单个 REGEXP_REPLACE,其模式包含捕获组以及替换模式中相应的反向引用,按要求的顺序排列并使用所需的分隔符:

REGEXP_REPLACE(s, '(\d{2})/(\d{2})/(\d{4})', '\3-\2-\1', 'g')

注意:如果您需要将这些字符串作为整个单词进行匹配,则可以使用单词边界 \y 将整个模式括起来,'\y(\d{2})/(\d{2})/(\d{4})\y'\d{2} 匹配两位数字,\d{4} 匹配四位数字。 (...) 创建一个编号的捕获组(从左到右从 ID 1 开始),它们的内容用 \n 反向引用引用。 'g' 替换字符串中所有出现的地方。

online test :

CREATE TABLE table1
    (s character varying)
;

INSERT INTO table1
    (s)
VALUES
    ('Mr X, born the 18/12/1953 in Y...'),
    ('Mr Y, died the 18/12/2053 in Y...')
;
select REGEXP_REPLACE(s, '\y(\d+)/(\d+)/(\d+)\y', '\3-\2-\1', 'g') as Results from table1;

enter image description here

关于regex - 在 PostgreSQL 9.3 中更改 varchar 列中的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43897096/

相关文章:

c++ - 如何在 C++ 正则表达式中使用 Unicode 范围

python - 错误 : No module named psycopg2. 扩展 django postgresql

sql - 如何将 PostgreSQL 转储文件恢复到 Postgres 数据库中?

python - 组中有行尾的正则表达式

regex - 在正则表达式中获取嵌套组时出现问题

postgresql - scalikeJDBC + postgres - 找不到合适的驱动程序

php - 调用未定义函数 pg_connect() - Wamp

postgresql - 从函数执行字符串查询

python - 用两个不同的分隔符拆分字符串,将两个单词大写,只包含分隔符,然后再添加两个分隔符的最佳方法是什么?

regex - Bash 正则表达式 : zero to three numbers