数字字符串上带有通配符的 Mysql 查询

发布于 2024-07-14 13:33:41 字数 225 浏览 7 评论 0原文

我正在尝试查询包含数字字符串的 mysql 表 (即“1,2,3,4,5”)。

我如何搜索它是否有“1”但没有“11”,记住如果是“9,10”“9%”不起作用?

固定的!

(field like '10' OR field like '%,10,%' OR field like '%,10' OR field like '10,%') 

I am trying to query a mysql table which contains strings of numbers
(i.e. '1,2,3,4,5').

How do I search to see if it has '1' but not '11' bearing in mind if it is '9,10' '9%' doesnt work??

Fixed!

(field like '10' OR field like '%,10,%' OR field like '%,10' OR field like '10,%') 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

凑诗 2024-07-21 13:33:41

您可以尝试函数 find_in_set

select find_in_set('1','1,2,3,11,12')

You could try the function find_in_set

select find_in_set('1','1,2,3,11,12')
巴黎夜雨 2024-07-21 13:33:41

您需要函数FIND_IN_SET。 顺便说一句,“9%”应该有效,如果该列包含您指定的值,您确定要查询吗

SELECT * FROM table WHERE field LIKE '9%'?

You need the function FIND_IN_SET. Btw, '9%' should work, if the column contains the values you specified, are you sure you're querying

SELECT * FROM table WHERE field LIKE '9%'?
酒废 2024-07-21 13:33:41

标准 SQL 也可以做到这一点:

...
WHERE 
  ',' + SetValue + ',' LIKE '%,1,%' 
  AND ',' + SetValue + ',' NOT LIKE '%,11,%' 

该表达式无法使用索引,因此随着表大小的增加,性能会迅速下降。

为了获得更好的性能,您的表应该正确标准化,例如

SetId  SetValue
    1  1
    1  2
    1  3
    1  4
    1  5

而不是

SetId  SetValue
    1  '1,2,3,4,5'

Standard SQL can do it as well:

...
WHERE 
  ',' + SetValue + ',' LIKE '%,1,%' 
  AND ',' + SetValue + ',' NOT LIKE '%,11,%' 

This expression cannot make use of an index, therefore performance will degrade quickly as the table size rises.

For better performance your table should be properly normalized, e.g.

SetId  SetValue
    1  1
    1  2
    1  3
    1  4
    1  5

instead of

SetId  SetValue
    1  '1,2,3,4,5'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文