如何匹配以逗号分隔的列表中的前缀?

时间:2013-09-30 09:50:56

标签: mysql

我有一个Store表,其中包含deliveryPostcodes字段,这是一个以逗号分隔的邮政编码区域列表:

id    deliveryPostcodes
1     EC1,EC2,N1
2     EC1,WC1,WC2
3     N1,N2

我想查询此表以查找与邮政编码匹配的商店,例如,如果用户输入EC2A 9XY,它应该返回第一行,因为这个列表中的条目是前缀完整的邮政编码。

如果没有自定义功能,是否有解决方案?

注意:我知道我可以通过加入一个单独的表格,每行有一个邮政编码区域,但我现在正在探索不同的选项。

2 个答案:

答案 0 :(得分:0)

假设DeliveryPostcodes是数值,您可以尝试使用这样的正则表达式匹配。

SELECT * 
FROM Store
WHERE deliveryPostcodes RLIKE '.*,?[0-9]+,?.*'

答案 1 :(得分:0)

不是一个真正的答案,而是解决此问题的唯一正确方法:规范化数据并将其放在单独的表中。由于您的解决方案是:

  1. 不适合编制索引
  2. 不利于搜索
  3. 使用正则表达式解决这个问题将会产生巨大的性能影响
  4. 一旦数据库开始增长,这种结构将导致问题。
  5. 带有邮政编码的查找表也可能在以后派上用场。您可以在谷歌上轻松找到所需国家/地区(或多个国家/地区)的邮政编码列表,甚至可以使用您可以用最少的工作在MySQL中导入的格式。