选择包含列中确切数字的行,并用逗号分隔数字

时间:2012-12-18 07:50:25

标签: mysql sql-like

也许答案很容易,但我找不到正确的MySQL查询,它可以做我想要的。

我有表用户

| id_user |  name   | action_type |
+---------------------------------+
|    1    | joshua  |  1,13,12,40 |
|    2    | joshua  |  2,8        |

我想只选择action_type列中具有确切数字的行。

action_type作为TEXT存储在MySQL中。

我试过这个:

SELECT * FROM user WHERE action_type LIKE '%2%'

但它选择了12行而不是我想要的行:(

也许有可能使用IN运算符,但我找不到正确的方法来使用它。

3 个答案:

答案 0 :(得分:3)

您正在寻找FIND_IN_SET

SELECT *
FROM user
WHERE FIND_IN_SET( '2', action_type )

SQL Fiddle DEMO

<强>更新

只是提到它,这也是可能的

SELECT *
FROM user
WHERE FIND_IN_SET( 2, action_type )

MySQL会自动转换为char

答案 1 :(得分:2)

LIKE子句中包含分隔符:

SELECT *
FROM   user
WHERE  action_type LIKE '2,%'
        OR action_type LIKE '%,2,%'
        OR action_type LIKE '%,2'

请注意,我必须使用另外两个LIKE子句来涵盖项目位于字符串开头或结尾的情况。

答案 2 :(得分:1)

尝试

SELECT * FROM user
WHERE CONCAT( ',', action_type, ',' ) LIKE '%,2,%';
  • 来自Sir Rufo的正确语法