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的用例中实际使用该函数,那就太好了。