gpt4 book ai didi

mysql - 如何检查一个字段中的字符串是否存在于逗号分隔字段的每个元素中

转载 作者:行者123 更新时间:2023-11-29 16:03:46 24 4
gpt4 key购买 nike

我有一个包含两个字段的表。第一个是name类型 string 。第二个包含一个或多个以逗号分隔的字符串(但它可以包含一个根本没有逗号的字符串)

我想构建一个查询来了解 name 中的字符串是否存在字段存在于 names每个逗号分隔的字符串中 field 。

示例 1:

---------------------------------------------------------
name names
---------------------------------------------------------
myname xmyname,myname,mynamey

所有逗号分隔的字符串都包含单词 myname 。所以查询不应该返回这一行。

但是,示例 2:

---------------------------------------------------------
name names
---------------------------------------------------------
myname x,myname,mynamey

应该被退回。因为 x 不包含 myname。

条件是,如果name字段中的字符串不存在于 names 中的每个逗号分隔字符串中字段,然后返回行。

这是不正确的,因为此查询在示例 2 中不会返回 true(其中包含 x ,但不包含 myname )。

重要提示:

1) 逗号的数量没有限制。可以是 0 个逗号或更多。这该如何处理呢?

2) 字符串是变量。字符串并不总是 myname 。每行在 name 中包含不同的字符串。字段。

最佳答案

尝试这个正则表达式:

where not concat(names, ',') regexp replace('^([^,]*{n}[^,]*,)*$', '{n}', name)

db-fiddle demo

如何读取模式:

内部图案[^,]*{n}[^,]*,意思是

  • 任何非逗号字符 [^,]重复任意次数(*表示不重复或多次)。
  • 后跟列的值 name ( {n} 是占位符,将使用 replace() 函数替换为实际值)
  • 后跟任何非逗号字符 [^,]重复任意次数
  • 后跟一个逗号

外部图案^({inner_pattern})*$意思是

  • 字符串开头 ( ^ )
  • 后跟重复任意次数的内部模式
  • 后跟字符串结尾 ( $ )

为了实现此目的,在 names 后面附加一个逗号。列 ( concat(names, ',') ),以便字符串中的每个元素都以逗号结尾。

该模式将确保逗号分隔字符串中的任何元素都包含 name 的值柱子。由于您想要相反的结果,因此我们使用 where not .. .

关于mysql - 如何检查一个字段中的字符串是否存在于逗号分隔字段的每个元素中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55936347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com