Sql 使用模式从字符串中提取子字符串

Sql 使用模式从字符串中提取子字符串,sql,regex,string,regex-group,presto,Sql,Regex,String,Regex Group,Presto,我想根据模式从长字符串中提取一个子字符串。想知道获得它的最佳方式是什么 http://abcdef?menu=xyz&source=push&push_id=1212239617294503480&message_id=7658a0a6-9d31-4c3c-9aa0-9169f24e2fdc 模式:“菜单” 子字符串查找:“xyz”这将执行以下操作: menu=([^&]+) 您可以在Presto DB中检查它,您应该能够以支持捕获组的形式使用: REGEXP

我想根据模式从长字符串中提取一个子字符串。想知道获得它的最佳方式是什么

http://abcdef?menu=xyz&source=push&push_id=1212239617294503480&message_id=7658a0a6-9d31-4c3c-9aa0-9169f24e2fdc
模式:“菜单”

子字符串查找:“xyz”

这将执行以下操作:

menu=([^&]+)

您可以在Presto DB中检查它,您应该能够以支持捕获组的形式使用:

REGEXP_EXTRACT(val, 'menu=([^&]+)', 1)
正则表达式细分:

menu=        # litteral string 'menu='
(            # beginning of capturing group number 1
  [^&]+          # at least one character other than '&'
)            # end of capturing group number 1

如果您的示例准确地表示了您的最终目标,那么该函数可能是比正则表达式更好的解决方案:

SELECT url_extract_parameter('http://abcdef?menu=xyz&source=push', 'menu');
-- returns 'xyz'

如何在SQL中做到这一点?如何在SQL中做到这一点?您需要检查SQL Db引擎是否支持正则表达式。+1解析URL是一项非常常见的任务,最好让专门编写的代码来完成。同意@AndyLester的观点,这是一个比正则表达式更好的解决方案。很高兴Presto提供了一个内置函数。@DavidPhillips:如果您可以编辑您的答案来演示如何在OP的用例中实际使用该函数,那就太好了。