需要使用 regexp_replace 将逗号添加到数字列表中 (Postgresql)
Need to add commas to a list of numbers with regexp_replace (Postgresql)
我正在尝试编写一个 postgres 函数,它将一个数字列表清理成一个逗号分隔的数字列表。这些数字被输入到输入字段中。我想让用户只输入一行 space 分隔的数字(例如:1 3 4 12
)并将其更改为 1,3,4,12
。
但是,如果他们确实输入正确(例如:1,3,4,12
或 1, 3, 4, 12
),我仍然希望它能够将其清理为 1,3,4,12
。我还必须考虑诸如(例如:1, 3 4, 12
)之类的事情。
这是我目前正在做的事情:
select regexp_replace(trim(list_of_numbers), '[^0-9.] | [^,]', ',', 'g')
如果我有这样的列表:
select regexp_replace(trim('1, 2, 4, 14'), '[^0-9.] | [^,]', ',', 'g')
它 returns : "1,2,4,14" 这样很好。
但是,如果我有这样的列表:
select regexp_replace(trim('1 2 4 14'), '[^0-9.] | [^,]', ',', 'g')
它 returns : "1,,,4"
您可以使用任意数量的空格或逗号拆分字符串 (,|\s)+
并使用逗号将其重新连接在一起:
select array_to_string(regexp_split_to_array('1 2 4 14', '(,|\s)+'), ', ');
我认为最好的选择是使用 regexp_split_to_array
转换为数组,然后将其转回字符串:
以下:
with t(input) as (
values
('1 3 4 12'),
('1,3,4,12'),
('1, 3 4, 12'),
('1,3,4,12'),
('1 3 4 , 12'),
(' 1, 2 , 4 12 ')
)
select array_to_string(regexp_split_to_array(trim(input),'(\s+)|(\s*,\s*)'), ',')
from t;
returns:
array_to_string
---------------
1,3,4,12
1,3,4,12
1,3,4,12
1,3,4,12
1,3,4,12
1,3,4,12
如果您将正则表达式更改为 [^0-9.]+
,它将替换所有 non-numerics(即 </code>、<code>,
、,
) 与 ,
.
我正在尝试编写一个 postgres 函数,它将一个数字列表清理成一个逗号分隔的数字列表。这些数字被输入到输入字段中。我想让用户只输入一行 space 分隔的数字(例如:1 3 4 12
)并将其更改为 1,3,4,12
。
但是,如果他们确实输入正确(例如:1,3,4,12
或 1, 3, 4, 12
),我仍然希望它能够将其清理为 1,3,4,12
。我还必须考虑诸如(例如:1, 3 4, 12
)之类的事情。
这是我目前正在做的事情:
select regexp_replace(trim(list_of_numbers), '[^0-9.] | [^,]', ',', 'g')
如果我有这样的列表:
select regexp_replace(trim('1, 2, 4, 14'), '[^0-9.] | [^,]', ',', 'g')
它 returns : "1,2,4,14" 这样很好。
但是,如果我有这样的列表:
select regexp_replace(trim('1 2 4 14'), '[^0-9.] | [^,]', ',', 'g')
它 returns : "1,,,4"
您可以使用任意数量的空格或逗号拆分字符串 (,|\s)+
并使用逗号将其重新连接在一起:
select array_to_string(regexp_split_to_array('1 2 4 14', '(,|\s)+'), ', ');
我认为最好的选择是使用 regexp_split_to_array
转换为数组,然后将其转回字符串:
以下:
with t(input) as (
values
('1 3 4 12'),
('1,3,4,12'),
('1, 3 4, 12'),
('1,3,4,12'),
('1 3 4 , 12'),
(' 1, 2 , 4 12 ')
)
select array_to_string(regexp_split_to_array(trim(input),'(\s+)|(\s*,\s*)'), ',')
from t;
returns:
array_to_string
---------------
1,3,4,12
1,3,4,12
1,3,4,12
1,3,4,12
1,3,4,12
1,3,4,12
如果您将正则表达式更改为 [^0-9.]+
,它将替换所有 non-numerics(即 </code>、<code>,
、,
) 与 ,
.