SQL,提取第 5 个逗号之前的所有内容

SQL, extract everything before 5th comma

比如我的专栏“标签”有

"movie/spiderman,genre/action,movie:marvel", 
"movie/kingsman,genre/action",
"movie/spiderman,genre/action,movie:marvel,movie:dfjkl,movie:fskj,movie:aa,movie:mdkk"

我正在尝试 return 第 5 个逗号之前的所有内容。下面是结果示例

"movie/spiderman,genre/action,movie:marvel", 
"movie/kingsman,genre/action",
"movie/spiderman,genre/action,movie:marvel,movie:dfjkl,movie:fskj"

我试过下面的代码,但它不起作用。

select
NVL(SUBSTRING(tags, 1,REGEXP_INSTR(tags,',',1,5) -1),tags)
from myTable

你可以使用

REGEXP_REPLACE(tags, '^(([^,]*,){4}[^,]*).*', '\1')

参见regex demo

REGEXP_REPLACE会发现以下模式的出现:

  • ^ - 字符串开头
  • (([^,]*,){4}[^,]*) - 第 1 组(</code> 指的是匹配的这一部分):四个序列,包含除逗号和逗号之外的任意零个或多个字符,然后是零个或多个字符除了逗号</li> <li><code>.* - 字符串的其余部分。

替换会在结果字符串中恢复第 1 组的值。