mySQL模式匹配逗号分隔列表

时间:2015-11-18 14:12:05

标签: mysql regex

我有一个包含餐馆信息的mySQL表。部分信息是以逗号分隔的数字列表,与餐厅所服务的菜肴类型相对应。我在从数据库中获取正确信息时遇到一些问题。表看起来像

id businessName cuisine_id
1  Pizza Place  2,3,4,
2  Burger Place 12,13,14,

我想出了

SELECT * FROM restaurant WHERE cuisine_id LIKE "%2,%"

但这让我遇到了与“2”,“12”和“22”匹配的问题。“

我也试过

SELECT * FROM restaurant WHERE cuisine_id LIKE "[^0-9]2,%"

但这没有任何回报。

有关如何编写此表达式的任何建议吗?

2 个答案:

答案 0 :(得分:4)

使用regexp

SELECT * FROM restaurant WHERE cuisine_id REGEXP "(^|,)2,"

对于num完全匹配,

SELECT * FROM restaurant WHERE cuisine_id regexp "(^|,)2(,|$)"

请注意,^$被称为正则表达式锚点,它与行的开头和结尾相匹配。此(^|,)将匹配行的开头或逗号。因此,这确保了以下模式必须在开头或以逗号开头。

答案 1 :(得分:1)

无需使用正则表达式,您可以使用FIND_IN_SET字符串函数:

SELECT * FROM restaurant WHERE FIND_IN_SET('2', cuisine_id)>0

或使用CONCAT:

SELECT * FROM restaurant WHERE CONCAT(',', cuisine_id, ',') LIKE '%,2,%'

或更好地规范化您的数据库结构(在单个字段中存储逗号分隔值通常不是一个好主意)