问题描述
下一个我需要一些帮助。我在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
,以全局替换所有用管道分隔的数字。