Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在PostgreSQL 9.3中更改varchar列中的日期格式_Regex_Postgresql - Fatal编程技术网

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

Regex 在PostgreSQL 9.3中更改varchar列中的日期格式,regex,postgresql,Regex,Postgresql,我有一个PostgreSQL数据库,其中的信息表包含关于人的评论 例如,X先生,1953年12月18日出生于Y. 我想使用唯一的PostgreSQL请求或方法将日期格式更改为ISO 8601(YYYY-MM-DD) 我知道如何检测数据库中的日期:(\d{2})/(\d{2})/(\d{4}) 使用此模式进行替换的最佳方式是什么 我曾考虑过一个混合了拆分的regex\u替换,但它似乎太复杂了,我相信有一个更简单的方法 如果有人有好的小费,我就接受 谢谢让我们假设您的输入中有XX/XX/XXXX类似

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

例如,
X先生,1953年12月18日出生于Y.

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

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

使用此模式进行替换的最佳方式是什么

我曾考虑过一个混合了拆分的
regex\u替换
,但它似乎太复杂了,我相信有一个更简单的方法

如果有人有好的小费,我就接受


谢谢

让我们假设您的输入中有
XX/XX/XXXX
类似日期的子字符串,这些子字符串始终是日期。然后,您可以使用单个
REGEXP\u 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'替换字符串中出现的所有内容

安:


假设您的输入中有
XX/XX/XXXX
类似日期的子字符串,这些子字符串始终是日期。然后,您可以使用单个
REGEXP\u 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'替换字符串中出现的所有内容

安:


如果要匹配一些掩码,我想regexp最适合日期格式是持久的吗?是否有其他非日期数据具有类似的模式?您是否尝试过任何方法来解决此任务?是否有模式?如果您有一些掩码需要匹配,regexp最适合我想日期格式是持久的吗?是否有其他非日期数据具有类似的模式?您是否尝试过任何方法来解决此任务?有图案吗?非常感谢!我不知道数字捕获组系统,我只是有regex模式。模式是什么?请分享。我的回答可能会更有帮助。我确认我的表格中只有这种格式的日期。但要知道,将正则表达式模式更改为捕获日期格式可以解决这个问题,对吗?类似于:
REGEXP\u REPLACE(s',\y()/()/()\y','\3-\2-\1','g')
我看到我在演示中使用了简化的正则表达式。实际上,regex中没有“日格式”或“月格式”的构造,它只匹配特定类型/集的字符(序列),仅此而已。您可以使日期正则表达式更精确,例如,将日值限制为
1
-
31
,月部分仅与
1
-
12
匹配。不过,它将接受2月29日、30日、31日和9月31日等。不过,它“足够好了”。我有“(\d{2}/(\d{2}/(\d{4})”。(没有这两个'\y')我知道如何检测它们,而不是如何替换。这是完美的,我现在只需要创建我的更新请求。非常感谢!我不知道数字捕获组系统,我只是有regex模式。模式是什么?请分享。我的回答可能会更有帮助。我确认我的表格中只有这种格式的日期。但要知道,将正则表达式模式更改为捕获日期格式可以解决这个问题,对吗?类似于:
REGEXP\u REPLACE(s',\y()/()/()\y','\3-\2-\1','g')
我看到我在演示中使用了简化的正则表达式。实际上,regex中没有“日格式”或“月格式”的构造,它只匹配特定类型/集的字符(序列),仅此而已。您可以使日期正则表达式更精确,例如,将日值限制为
1
-
31
,月部分仅与
1
-
12
匹配。不过,它将接受2月29日、30日、31日和9月31日等。不过,它“足够好了”。我有“(\d{2}/(\d{2}/(\d{4})”。(没有这两个'\y')我知道如何检测它们,而不是如何替换。这很完美,我现在只需要创建我的更新请求。