Sql 如何在字符之前获取所有数字?
我需要获取base中满足下一个逻辑的所有行:Sql 如何在字符之前获取所有数字?,sql,regex,vertica,Sql,Regex,Vertica,我需要获取base中满足下一个逻辑的所有行: [some text/][digits(one or more)]_[some text] 比如说, 'Main/Search/124_mobile' 'Main/Search/4_service' 首先,我需要得到这些行,然后得到\uu符号前面的数字 我尝试了这种类型的正则表达式: regexp_like(event, '^[Main/Search/[1-9]+(?=_') 但它只提取如下行: Main/Search/1_ 并且不提取在符号
[some text/][digits(one or more)]_[some text]
比如说,
'Main/Search/124_mobile'
'Main/Search/4_service'
首先,我需要得到这些行,然后得到\uu
符号前面的数字
我尝试了这种类型的正则表达式:
regexp_like(event, '^[Main/Search/[1-9]+(?=_')
但它只提取如下行:
Main/Search/1_
并且不提取在符号前面有许多数字的行
最后,我希望在符号之前得到数字。对于值'Main/Search/124\u mobile'
它将是'124'
您要查找的是这个
选择REGEXP\u REPLACE(事件'.*\/(\d+)\\\.*','\1')
首先,我发现使用Vertica正则表达式函数时,最好使用\d
(数字的缩写)而不是\[0-9]
进行数字匹配
模式*\/(\d+)\.*
匹配事件的整个值,但由于\d+
包含在括号中,因此它成为第一个捕获的组,在替换参数中表示为反斜杠1\1
,因此即使事件中的整个值匹配,仅显示第一组\1
要进行筛选,以便查询结果中只显示包含该模式的行,请使用REGEXP\u LIKE
整个查询将如下所示
选择REGEXP\u REPLACE(事件'.*\/(\d+)\\\.*','\1')
从桌子上
其中REGEXP_类似(事件'.*\/\d+\\\.*');
有关更多信息,请参阅本页文档中最后一个示例(底部关于电话号码的示例):您要查找的就是这个
选择REGEXP\u REPLACE(事件'.*\/(\d+)\\\.*','\1')
首先,我发现使用Vertica正则表达式函数时,最好使用\d
(数字的缩写)而不是\[0-9]
进行数字匹配
模式*\/(\d+)\.*
匹配事件的整个值,但由于\d+
包含在括号中,因此它成为第一个捕获的组,在替换参数中表示为反斜杠1\1
,因此即使事件中的整个值匹配,仅显示第一组\1
要进行筛选,以便查询结果中只显示包含该模式的行,请使用REGEXP\u LIKE
整个查询将如下所示
选择REGEXP\u REPLACE(事件'.*\/(\d+)\\\.*','\1')
从桌子上
其中REGEXP_类似(事件'.*\/\d+\\\.*');
有关更多信息,请参阅本页文档中的最后一个示例(底部关于电话号码的示例):您使用的是哪种DBMS?@FDavidov VerticaDidn我不愿意熟悉它。很抱歉我唯一能告诉您的是,如果您要执行一个select,其中WHERE
包含正则表达式,您可能需要等待很长时间才能得到结果(这里我假设您的表可能相当大)。我建议您首先获取匹配记录的子集(例如,在特定字段中包含一个或多个数字的记录),然后使用正则表达式执行第二次扫描。@FDavidov谢谢您的建议!也许你能帮我学习正则表达式?我认为从DBMS到DBMS没有太大的变化。您是否总是有两个/
来分隔元素?您使用的是哪种DBMS?@FDavidov Verticadidd不愿意熟悉它。很抱歉我唯一能告诉您的是,如果您要执行一个select,其中WHERE
包含正则表达式,您可能需要等待很长时间才能得到结果(这里我假设您的表可能相当大)。我建议您首先获取匹配记录的子集(例如,在特定字段中包含一个或多个数字的记录),然后使用正则表达式执行第二次扫描。@FDavidov谢谢您的建议!也许你能帮我学习正则表达式?我认为从DBMS到DBMS没有太大的变化。您是否总是有两个/
来分隔元素?