我有一个表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%'
但是,这仅是列中第一个数字。有人可以帮我这个查询吗?
答案 0 :(得分:1)
假设链接中除突出显示的数字外没有其他数字,这应该可以工作:
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;
工作小提琴here