MySQL选择列包含值的行

时间:2014-07-29 18:24:54

标签: mysql sql

我尝试过使用' LIKE'但它遇到了一些问题,我将在下面解释。

我有一个字符串列,看起来像这些。 " 1010,2020,3030" " 1010" ""

我希望能够看到此字符串是否包含单个ID。例如2020.如果确实如此,则返回该行。我尝试使用like,但如果id为20,它将返回行,因为2020包含20.

选择整个数据库,然后使用分隔符遍历所有字符串将花费太多时间。有可能实现这个吗?

2 个答案:

答案 0 :(得分:4)

这就是您不在单个字段中存储多个值的原因。因为你的设计不好,这就是你必须使用每个单一时间来补偿它的查询结构:

WHERE
       foo = 2020            // exact match, only value in field
    OR foo LIKE '2020,%'     // value is at start of field
    OR foo LIKE '%,2020,%'   // value is somewhere in the middle of the field
    OR foo LIKE '%,2020'     // value is at the end of the field

或者你可以有一个正确的标准化设计,刚刚完成

WHERE childtable.foo = 2020

并完成它。

答案 1 :(得分:3)

首先,您不应该在字符串变量中存储事物列表。 SQL为列表提供了非常好的数据结构。它被称为表。这样一个表中的每一行都有一个id和列表中的一个值。

那就是说,有时你会被这样的数据所困扰。在这种情况下,您可以使用find_in-set()

where find_in_set('20', replace(stringcolumn, ', ', ',')) > 0;

您也可以使用like执行逻辑,但MySQL具有方便的内置功能。<​​/ p>

编辑:

如果您想使用like执行此操作:

where concat(',', stringcolumn, ',') like '%,20,%'

请注意,分隔符&#34;保护&#34;这些值,因此20不会与2020混淆。