Postgres SQL regexp_replace替换所有数字

问题描述

一个我需要一些帮助。我在sql中有一个字段文本,此记录用'|'分隔的时间列表。例如

'14613 | 15474 | 3832 | 148 | 5236 | 5348 | 1055 | 524'每个值都是以毫秒为单位的时间。该字段可以是任意长度,例如完全正确的“ 3215 | 2654”或“ 4565”(仅1个值)。我需要获取此字段并将所有数字替换为-1000值。

因此'14613 | 15474 | 3832 | 148 | 5236 | 5348 | 1055 | 524'将是'-1000 | -1000 | -1000 | -1000 | -1000 | -1000 | -1000 | -1000'>

或'3215 | 2654'=>'-1000 | -1000'或'4565'=>'-1000'。

我尝试使用regexp_replace(times_field,'[[:digit:]]','-1000','g'),但它将替换每个数字,而不是完整的数字,因此在此示例中:

“ 3215 | 2654”必须大于“ -1000 | -1000”,我得到:

'-1000-1000-1000-1000 | -1000-1000-1000-1000',我尝试使用其他组合和更多正则表达式选项,但是我做完了。

请需要您的帮助,谢谢!!

解决方法

[[:digit:]]-匹配数字[0-9]

+量词-匹配一次和无限次,并尽可能多地匹配

您的正则表达式必须看起来像

regexp_replace(times_field,'[[:digit:]]+','-1000','g')

,

我们可以在此处尝试使用REGEXP_REPLACE

UPDATE yourTable
SET times_field = REGEXP_REPLACE(times_field,'\y[0-9]+\y','g');

如果相反,您真的要更改数据,而只是想以这种方式查看数据,则使用select:

SELECT
    times_field,REGEXP_REPLACE(times_field,'g') AS times_field_replace
FROM yourTable;

请注意,无论哪种情况,我们都将g作为Fourtb参数传递给REGEXP_REPLACE,以全局替换所有用管道分隔的数字。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...