[英]Use regex search in mysql within a comma separated string with regex patterns?
mysql> SELECT '11624' REGEXP "^(116[0-9]{2}|11625)$";
+----------------------------------------+
| '11624' REGEXP "^(116[0-9]{2}|11625)$" |
+----------------------------------------+
| 1 |
+----------------------------------------+
1 row in set (0.00 sec)
请注意,我不得不改变你在保存语法shipping_zipcodes
-最重要的是: |
而不是,
。
如果您可以假设所有输入值(例如11624
)都是5位数字,那么您可能无需锚定或括号就可以这样做。 如果没有,则可以使用CONCAT()
将它们附加到当前的内容上。
你也许能够使用REPLACE()
转,
变成|
:
mysql> SELECT '11624' REGEXP REPLACE("116[0-9]{2},11625", ',', '|');
+-------------------------------------------------------+
| '11624' REGEXP REPLACE("116[0-9]{2},11625", ',', '|') |
+-------------------------------------------------------+
| 1 |
+-------------------------------------------------------+
但是...如果您的列表很长,查询将很慢。 这些都需要全表扫描。 如果速度太慢,则需要构建一个表,将各个邮政编码映射到提供程序,并将其编入索引。
在这种情况下,最好使用FIND_IN_SET而不是REGEX:
SELECT * FROM providers WHERE FIND_IN_SET('11624', shipping_zipcodes) > 0;
我认为最好的答案是对表格进行规范化处理,以摆脱逗号分隔的列表。 然后,我可以使用此查询来获取我想要的结果:
SELECT
pr.*,
GROUP_CONCAT(psp.postcode ORDER BY psp.postcode ASC SEPARATOR ',') AS postcodes
FROM
providers pr
LEFT JOIN
providers_shipping_postcodes psp ON psp.provider_id = pr.id
WHERE
'11624' RLIKE psp.postcode
GROUP BY
pr.id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.