从Postgres中的字符串中提取特定长度的数字
Extracting number of specific length from a string in Postgres
我正在尝试从
等评论中提取一组数字
"on april-17 transactions numbers are 12345 / 56789"
"on april-18 transactions numbers are 56789"
"on may-19 no transactions"
它们存储在 table 条评论中名为 "com" 的列中
我的要求是得到特定长度的数字。在这种情况下,长度为 5,所以 12345 和 56789 来自上面的字符串,可能有 0 个五位数或超过 2 个五位数。
我尝试使用 regexp_replace 得到以下结果,我正在尝试找到一个有效的正则表达式或其他方法来实现它
select regexp_replace(com, '[^0-9]',' ', 'g') from comments;
regexp_replace
----------------------------------------------------
17 12345 56789
我希望结果只得到
column1 | column2
12345 56789
没有简单的方法来创建获取任意数量列的查询:它不能为一个数字创建一个列,而在下一次尝试时查询会给出两个。
对于固定的两列:
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()
将所有元素放入一个数组
- 数组元素可以作为单独的列给出。
我正在尝试从
等评论中提取一组数字"on april-17 transactions numbers are 12345 / 56789"
"on april-18 transactions numbers are 56789"
"on may-19 no transactions"
它们存储在 table 条评论中名为 "com" 的列中
我的要求是得到特定长度的数字。在这种情况下,长度为 5,所以 12345 和 56789 来自上面的字符串,可能有 0 个五位数或超过 2 个五位数。
我尝试使用 regexp_replace 得到以下结果,我正在尝试找到一个有效的正则表达式或其他方法来实现它
select regexp_replace(com, '[^0-9]',' ', 'g') from comments;
regexp_replace
----------------------------------------------------
17 12345 56789
我希望结果只得到
column1 | column2
12345 56789
没有简单的方法来创建获取任意数量列的查询:它不能为一个数字创建一个列,而在下一次尝试时查询会给出两个。
对于固定的两列:
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()
将所有元素放入一个数组- 数组元素可以作为单独的列给出。