我正在尝试从
之类的注释中提取一组数字"on april-17 transactions numbers are 12345 / 56789"
"on april-18 transactions numbers are 56789"
"on may-19 no transactions"
其中哪些存储在表注释中名为“ com”的列中
我的要求是获取特定长度的数字。在这种情况下,长度为5,因此上述字符串的长度分别为12345和56789,可以有0个5位数字或大于2个5位数字。
我尝试将regexp_replace与以下结果一起使用,我正在尝试寻找一种有效的正则表达式或其他方法来实现它
select regexp_replace(com, '[^0-9]',' ', 'g') from comments;
regexp_replace
----------------------------------------------------
17 12345 56789
我希望结果只能得到
column1 | column2
12345 56789
答案 0 :(得分:1)
创建具有任意列数的查询没有简单的方法:它无法为一个数字创建一列,而在下一次尝试中查询将给出两列。
对于固定的两列:
SELECT
matches[1] AS col1,
matches[2] AS col2
FROM (
SELECT
array_agg(regexp_matches[1]) AS matches
FROM
regexp_matches(
'on april-17 transactions numbers are 12345 / 56789',
'\d{5}',
'g'
)
) s
regexp_matches()
在每个查找结果的一行中给出所有查找结果array_agg()
将所有元素放入一个数组