SQL技术咨询:编写查询含%的列及Student表对应行的语句
没问题,这两个SQL需求我帮你拆解清楚,分数据库场景给你对应的解决方案:
1. 获取所有列名包含%字符的列
因为%是SQL中LIKE语句的通配符,要匹配列名里的字面%必须先转义它。不同数据库的系统表和转义方式略有区别:
MySQL/MariaDB/SQL Server
用INFORMATION_SCHEMA.COLUMNS系统视图查询所有表的列信息:
SELECT table_name, column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE column_name LIKE '%\%%' ESCAPE '\';
SQL Server还支持更简洁的写法,用[]包裹通配符表示字面匹配:
SELECT table_name, column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE column_name LIKE '%[%]%';
Oracle
用USER_TAB_COLUMNS(仅当前用户有权限的表)或ALL_TAB_COLUMNS(所有可访问的表):
SELECT table_name, column_name FROM USER_TAB_COLUMNS WHERE column_name LIKE '%\%%' ESCAPE '\';
2. 筛选Student_Name列值包含%的行
同样因为%是通配符,要匹配字段值里的字面%需要转义处理。以下是不同场景的写法:
通用兼容写法(适用于绝大多数数据库)
用ESCAPE子句明确指定转义字符,避免数据库默认行为差异:
SELECT * FROM Student WHERE Student_Name LIKE '%\%%' ESCAPE '\';
这个语句会匹配Student_Name中任意位置包含%的行,对应你的测试数据,会返回a%xw和p%ghjk这两行。
数据库专属简化写法
- MySQL/MariaDB:默认支持反斜杠转义,可省略
ESCAPE子句:SELECT * FROM Student WHERE Student_Name LIKE '%\%%'; - SQL Server:用
[]包裹%表示字面匹配:SELECT * FROM Student WHERE Student_Name LIKE '%[%]%';
内容的提问来源于stack exchange,提问作者Rupesh KUMAR
相关产品推荐
相关产品推荐

