如何在MySQL中查找含回车的列?SQL初学者查询匹配问题
嘿,作为SQL初学者碰到这种带特殊字符的匹配问题太正常了,我来帮你搞定这两个需求~
1. 匹配带或不带回车的'ABCDEF'
你可以通过两种思路来实现:要么移除字段里的回车后再匹配,要么直接匹配包含可选回车的模式。
方法一:移除回车后匹配
用REPLACE()函数把字段中的回车字符(MySQL中用CHAR(13)表示)去掉,再和目标值'ABCDEF'对比。如果不确定是回车还是换行(有时候可能两者都存在),可以嵌套替换同时处理两种字符:
-- 仅处理回车 SELECT id FROM `a_table` WHERE REPLACE(col_value, CHAR(13), '') = 'ABCDEF'; -- 同时处理回车和换行 SELECT id FROM `a_table` WHERE REPLACE(REPLACE(col_value, CHAR(13), ''), CHAR(10), '') = 'ABCDEF';
方法二:用正则表达式匹配可选回车
MySQL的REGEXP支持正则匹配,你可以用[[:cntrl:]]?来匹配可选的控制字符(包括回车、换行等),这样不管目标值中间有没有回车都会被匹配到:
SELECT id FROM `a_table` WHERE col_value REGEXP 'ABC[[:cntrl:]]?DEF';
如果只想精准匹配回车,也可以直接写CHAR(13)到正则里:
SELECT id FROM `a_table` WHERE col_value REGEXP CONCAT('ABC', CHAR(13), '?DEF');
2. 在MySQL中找出包含回车的列
要筛选出col_value里包含回车的记录,同样有两种常用方法:
方法一:用LIKE匹配回车
通过CONCAT()把通配符和回车字符拼接,用LIKE来匹配包含回车的字段:
SELECT id, col_value FROM `a_table` WHERE col_value LIKE CONCAT('%', CHAR(13), '%');
方法二:用正则表达式匹配
正则的方式更直观,直接匹配字段中是否存在回车字符:
SELECT id, col_value FROM `a_table` WHERE col_value REGEXP CHAR(13);
如果想找出所有包含控制字符(比如回车、换行、制表符等)的记录,可以用[[:cntrl:]]这个正则类:
SELECT id, col_value FROM `a_table` WHERE col_value REGEXP '[[:cntrl:]]';
内容的提问来源于stack exchange,提问作者Abhik
相关产品推荐
相关产品推荐

