存储含脱字符^的主键列数据,如何实现精准搜索?
解决主键列包含脱字符
^的搜索问题 嘿,我来帮你搞定这个问题!你遇到的情况是主键列里包含脱字符^,想用查询找出这类数据,但之前用方括号的方法没生效对吧?这大概率是因为你搞混了方括号的用途——它主要是用来转义标识符(比如列名带特殊字符)的,不是用来处理字符串里的^的。
下面分几种常见数据库给你具体的解决方案:
MySQL/MariaDB
在MySQL里,^并不是LIKE语句的通配符,所以你直接用普通的LIKE就能匹配包含^的字符串:
SELECT * FROM your_table WHERE your_pk_column LIKE '%^%';
如果你是用正则表达式(REGEXP)来查询,那^是行首锚点,这时候需要用反斜杠转义(注意要写两个反斜杠,因为SQL会先解析一个,剩下的一个传给正则引擎):
SELECT * FROM your_table WHERE your_pk_column REGEXP '\\^';
SQL Server
SQL Server的LIKE语句里,^只有在方括号[]内才是特殊字符(表示“排除”)。如果你的数据里的^是单独存在的,直接用LIKE即可,不需要额外转义:
SELECT * FROM your_table WHERE your_pk_column LIKE '%^%';
要是你需要在方括号语境下匹配^(比如同时匹配其他特殊字符),可以用转义符指定:
SELECT * FROM your_table WHERE your_pk_column LIKE '%\^%' ESCAPE '\';
PostgreSQL
PostgreSQL里^同样不是LIKE的通配符,直接用LIKE查询即可:
SELECT * FROM your_table WHERE your_pk_column LIKE '%^%';
如果用正则匹配(~操作符),则需要转义:
SELECT * FROM your_table WHERE your_pk_column ~ '\^';
额外提示:精确匹配带^的主键值
如果你是想精确匹配某个特定的带^的主键(比如示例中的EEECC^QWERTYUIOP^1234),直接用等于号就行,完全不需要转义:
SELECT * FROM your_table WHERE your_pk_column = 'EEECC^QWERTYUIOP^1234';
内容的提问来源于stack exchange,提问作者user3571396
相关产品推荐
相关产品推荐

