如何在可变长度的子字符串之后提取下一个单词? - 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)
我在一栏中有文字 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)