MySQL如何检查字符串是否包含指定字符集中的任意字符?
最优简化方案
直接利用REGEXP的字符集合匹配能力,一次性覆盖所有无效字符,同时合并两个字段的匹配逻辑,不需要重复写多段LIKE/REGEXP判断:
SELECT id_customer, firstname, lastname FROM customer WHERE CONCAT(IFNULL(firstname, ''), IFNULL(lastname, '')) REGEXP '[0-9!<> ,;?=+()@#"°{}_$%/\\^*]';
说明
- 所有你列出的无效字符都已经放到
[]字符类中,REGEXP只要匹配到其中任意一个字符就会返回真,完美覆盖你的筛选需求 - 用
CONCAT合并两个姓名字段的判断,避免重复写两遍字段的匹配逻辑 - 加
IFNULL是为了避免某一个字段为NULL时,CONCAT结果为NULL导致漏判的问题,如果你表中的姓名字段不允许为NULL可以去掉这层包裹 - 注意字符类中的反斜杠需要写双反斜杠
\\做SQL转义
内容的提问来源于stack exchange,提问作者Chef Tony
相关产品推荐
相关产品推荐

