sql - 从列中提取数字

标签 sql postgresql

我有一个表 Job,其中有一列 Comment 包含以下数据:

-#AB1 #XY: https://xxxxxxxxxx/xxx/xxx/xxxxxxxx/12345/xxxxxxx
-#XY: https://xxxxxxx/xxx/xxx/xxxxxxxx/23456/xxxxx #AB2
-#XY: https://xxxxxxxxxx/xxx/xxx/xxxxxxxx/34567/xxxx
-#XY: https://xxxxxxxx/xxx/xxx/xxxxxx/45677/xxxxxxxx

因此,如果在评论栏中的 #XY 中,它应该给我链接中的数字 (https://xxxxxxxxxx/xxx/xxx/xxxxxxxx/12345/xxxxxxx)。

如果列中同时有#XY 和#AB,它应该给我一个接近#AB 的数字。

我用过:

SELECT substring(comment FROM '[0-9]+') AS original_id,
FROM job
WHERE internal_comment LIKE '%AB%'

但这只给我列中的第一个数字。谁能帮我解决这个问题。

最佳答案

假设链接中除了突出显示的数字之外没有其他数字,这应该可以工作:

SELECT 
/* match in any order */
CASE WHEN comment ~ '(#AB.*#XY)|(#XY.*#AB)'
/* match #AB{ any digits } and get only the number */
THEN (REGEXP_MATCHES(Comment, '(#AB)(\d+)'))[2]
/* find the digits in the link */
ELSE (REGEXP_MATCHES(comment, '\d+'))[1] END AS original_id
FROM job;

工作 fiddle here

关于sql - 从列中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52493317/

相关文章:

postgresql - 在 Doctrine2 中配置原生 Point PostgreSQL 类型

sql - Gnu Emacs : tab-completion for psql running within sql. el 进程

mysql - 如何使用SQL中的中间表从外部表中选择每个字段?

postgresql - 如果两个进程同时修改两个事务中的数据,并且表存在唯一约束,会发生什么情况?

python - 使用 SQLAlchemy 的 IDE 文本选择

sql - 使用最后一个非空值更新有序行

regex - SELECT 和 WHERE 中的冗余正则表达式

MySQl 创建函数来检查字符串是否正确

SQL Server 按位或分组?

sql - 在delphi中存储过程