sql - 从 Postgres 中的字符串中提取特定长度的数量
问题描述
我正在尝试从评论中提取一组数字,例如
"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 个五位数字或超过 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()
将所有元素放入一个数组- 数组元素可以作为单独的列给出。
推荐阅读
- python - 如何恢复 url 中的文本并将文本转换回来?
- ios - 动画切换 CollectionViewLayout
- python - xml中的注释转换为json?
- java - 如何将@Propertysource 文件转换为地图?
- redis - 来自不同日志文件中不同应用程序的 Celery 任务
- django - Celery RuntimeError: populate() 不可重入
- angular - 使用 Angular 7 + Webpack 4 封装 css
- go - 可以使用 Go 实现 VPP 插件吗?
- java - 在执行 jar 并将其输出重定向到文件时在控制台上打印 System.out.println 语句
- javascript - 我如何通过单击预先选择的选项来操纵 jquery 功能