如何在可变长度的子字符串之后提取下一个单词? - SQL

How to extract next word after substring that is of variable length? - SQL

我在一栏中有文字 col 类似于,

{insert random junk text here} FROM db_name.table_name {insert random junk text here}

我需要提取 db_name.table_name 并将其单独存储在一个列中。请注意,db_name.table_name 是可变长度的。

我尝试过的:

SELECT substring(col, strpos('FROM ', col), strpos(' ', col) - strpos('FROM ', col) + len(' '))  

这只是提取列中垃圾的第一个字符。如果有人能帮我解决这个问题,那就太好了!

边缘案例

在某些情况下,可能有多个 FROM 关键字。在这里,我需要将所有三个 db_name.table_name 提取到不同的行中。:

{insert random junk text here} FROM db_name1.table_name1 {insert random junk text here} FROM db_name1.table_name2 {insert random junk text here} FROM db_name1.table_name3 {insert random junk text here}

您可以使用 regexp_matches 查找所有出现的 FROM,后跟不包含 space 的文本(table 名称)和 return 找到的文字

with src(txt) as (values ('{insert random junk text here} FROM db_name1.table_name1 {insert random junk text here} FROM db_name1.table_name2 {insert random junk text here} FROM db_name1.table_name3 {insert random junk text here}'))

select unnest(regexp_matches (txt, 'FROM ([^ ]+)','g')) from src;

        unnest
----------------------
 db_name1.table_name1
 db_name1.table_name2
 db_name1.table_name3
(3 rows)