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 组的值。
比如我的专栏“标签”有
"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 组的值。