【问题标题】:Search multiples strings in MySQL in a text colunm separated by ","在 MySQL 中以“,”分隔的文本列中搜索多个字符串
【发布时间】:2016-12-19 13:11:23
【问题描述】:

我没有找到解决问题的方法。

这是一个例子:

A 有一个表,例如:Person。它有一列包含用“,”分隔的批号。这些数字代表事物,但现在不相关。

Person

nm_name: Jonas
nm_email: jonas@example.com
ds_numbers: 1,2,3,5,17,27,67,77,

我想做一个查询,按此列ds_numbers 过滤表 person 中的搜索。但是用户会通过过滤器选择女巫号码,例如,如果用户选择了该列中的至少1个号码,则寄存器会来。

如果我选择,例如,“3”这个寄存器会出现,或者“3,55,12”也会出现,因为字符串中至少需要一个值。

问题来了,我不能使用 Like '%4%' 因为我会返回 4, 41, 74... 有什么不同的解决方案吗?

重要提示:我在 Java 中安装了这个查询,所以我可以使用 Java 功能,例如循环,但我没有找到解决方案。有什么想法吗?

我正在使用 MySQL。

【问题讨论】:

标签: java mysql


【解决方案1】:

您可以使用 LIKE,但使用当前格式,您会得到误报。 '%4%' 也将匹配数字 40 或 14。

理想情况下,更改您的数据以使用分隔符存储数字。 “|3|,|55|,|32|”。 那么当你选择使用 LIKE '%|3|%' 时,它只会匹配 |3|。

您可以使用 LIKE '%3,%',但如果 3 是字符串中的最后一个数字,则它不会匹配最后一个数字。

【讨论】:

  • 我想了想,用'%',真的不行。但我喜欢你使用“|”的解决方案。当然可以,但是已经有一个庞大的基地,这是不可行的。不过谢谢分享!
  • 您的字段末尾是否有逗号? (在您的示例中,您有一个,但它可能只是一个 sn-p。)如果没有,您可以在字段中添加一个尾随逗号吗?如果是这样,那么您可以使用 LIKE '%,3,%' 或 LIKE '%,343,%'
【解决方案2】:

您也许可以使用带有 LIKE 运算符的通配符进行简单的文本搜索。

SELECT ds_numbers FROM table WHERE ds_numbers LIKE '%3%'

如果没有,那么您可以尝试此问题的答案中提到的全文搜索功能:Search for string within text column in MySQL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    相关资源
    最近更新 更多