【问题标题】:SQL query to select columns with exact like?SQL查询以选择完全相同的列?
【发布时间】:2018-03-13 21:59:48
【问题描述】:

考虑这个 SQL 表

id | name | numbers
------------------------
1 | bob | 1 3 5
2 | joe | 7 2 15

这个查询返回整个表作为它的结果:

SELECT * FROM table WHERE numbers LIKE '%5%'

是否有一个 SQL 运算符使其仅返回第 1 行(仅返回编号为 5 的列)?

【问题讨论】:

  • 不要将数字存储在分隔字符串中。这是一个虚伪。使用单独的表格,每个“名称”和“编号”一行。
  • SELECT * FROM table WHERE numbers LIKE '% 5 %'
  • 如果您需要一次性使用FIND_IN_SETREPLACE,但如果您每次都需要使用,请遵循@GordonLinoff 的建议。
  • @GordonLinoff 我理解这是虚假的,你的建议更好。如果我使用-作为字符串分隔符,例如-1-3-5-LIKE '%-5-%' 有效。它仍然是一团糟,但我只想知道这种虚假方法是否存在任何重大问题?我通常想坚持一张桌子,因为这是一个简单的应用程序。

标签: mysql sql


【解决方案1】:

regexp 与单词边界一起使用。 (但您最好听从 Gordon 的评论)

where numbers REGEXP '[[:<:]]5[[:>:]]'

【讨论】:

    【解决方案2】:

    很遗憾您没有在numbers 列中使用逗号作为分隔符,因为可以使用FIND_IN_SET 函数,但是您可以将它与REPLACE 一起使用,如下所示:

    SELECT * FROM table WHERE FIND_IN_SET(5, REPLACE(numbers, ' ', ',')); 
    

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 2015-02-05
      • 2017-01-21
      • 1970-01-01
      • 2017-11-08
      相关资源
      最近更新 更多