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

标签 sql regex amazon-web-services amazon-redshift

例如,我的“标签”栏有

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

我试图返回第 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 组(\1 指匹配的这一部分):四个序列,其中包含除逗号和逗号之外的任意零个或多个字符,然后是除逗号之外的零个或多个字符
  • .* - 字符串的其余部分。

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

关于SQL,提取第5个逗号之前的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70793094/

相关文章:

mysql - 按时间聚合

amazon-web-services - 如何暂停/恢复AWS Lambda函数

regex - 使用正则表达式更改第 n 次出现

php - 正则表达式环视

python - 正则表达式忽略数字后跟单词/非数字字符

amazon-web-services - AWS CloudFormation 模板 : how to get templates info?

amazon-web-services - 在 docker 容器(在 EC2 实例上)内运行的微服务未到达 AWS ALB

mysql - SQL WHERE LIKE 或 FILTER

sql - 如何基于数据库角色构建资源调控器分类器功能?

mysql - 根据另一个表触发器的条件更新表