Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从每个字符串中最后一个下划线后的字符串中获取所有内容_Sql_Regex_Google Bigquery - Fatal编程技术网

Sql 从每个字符串中最后一个下划线后的字符串中获取所有内容

Sql 从每个字符串中最后一个下划线后的字符串中获取所有内容,sql,regex,google-bigquery,Sql,Regex,Google Bigquery,我正试图从大查询中最后一个下划线之后的字符串列表中提取所有内容,即MOB\uu之后的字符串 见下例: 字符串: Topshop_AW19_Pro_MOB_competitors(mid price point)custom_affinity 期望输出: competitors(mid price point)custom_affinity 以下是可能的解决方案之一: SELECT SUBSTRING(your_field, LOCATE('MOB_',your_field)+4) FROM

我正试图从大查询中最后一个下划线之后的字符串列表中提取所有内容,即
MOB\uu
之后的字符串

见下例:

字符串:

Topshop_AW19_Pro_MOB_competitors(mid price point)custom_affinity
期望输出:

competitors(mid price point)custom_affinity

以下是可能的解决方案之一:

SELECT SUBSTRING(your_field, LOCATE('MOB_',your_field)+4)
FROM your_table;
或者使用regexp

SELECT REGEXP_SUBSTR(your_field,'(?<=MOB_).*$') 
FROM your_table
如果不想使用substr:

使用oracle编辑2: 请参见此处的更多示例
一个用regexp\u替换,一个用instr(=在oracle中查找)。

这似乎直截了当:

RIGHT(stuff, RIGHT_FIND(stuff, 'MOB_'))
有趣的是,文档似乎有一些错误:


最后一个理解是在“客户亲缘关系”中,因此我希望“亲缘关系”是所需的输出。抱歉,我希望在MOB\u之后的所有内容,以及最后一个
之后和
之前的所有内容(
如果存在,是否
?:[^]+\(.*124;[^]+)$
对您有用吗?-只需从结果中删除第一个字符。我在bigquery的文档中没有看到LOCATE——这是oracle和db2,对吗?好吧——还要找到如何使用FIND函数实现这一点?在oracle中,我将使用instr函数,它类似于LOCATE,我想是FIND?请参阅上面的第二次编辑,并提供更多示例
SELECT regexp_substr(your_field,'MOB_(.*)', 1, 1, NULL, 1) "result" FROM your_table;
RIGHT(stuff, RIGHT_FIND(stuff, 'MOB_'))