编写SQL查询筛选包含指定允许字符以外字符的数据行
筛选包含非法字符的数据行SQL实现
需求:从表中筛选出colName列值包含允许字符范围外字符的数据行。
允许的字符范围
- 数字:
0-9 - 大小写字母:
a-z、A-Z - 空格
- 反引号:
` - 特殊字符:
!$%[_-()+(注:根据示例结果推测加号+属于允许字符,原需求可能漏列)
示例数据
colName _______ abc123" acb231! bca412++ .4!21 abc 123
目标结果
abc123" .4!21
不同数据库的SQL写法
MySQL/MariaDB
使用REGEXP正则匹配:
SELECT colName FROM your_table WHERE colName REGEXP '[^0-9a-zA-Z `!$%\\[_\\-()\\+]';
PostgreSQL
使用~操作符:
SELECT colName FROM your_table WHERE colName ~ '[^0-9a-zA-Z `!$%\\[_\\-()\\+]';
SQL Server
使用PATINDEX函数:
SELECT colName FROM your_table WHERE PATINDEX('%[^0-9a-zA-Z `!$%\\[_\\-()\\+]%', colName) > 0;
说明
- 正则表达式中的
[^...]表示匹配不在括号内的任意字符,只要列值中存在这类字符,就会被筛选出来。 - 示例中被筛选的两行:
abc123"含非法的双引号",.4!21含非法的点.,其余行的字符均在允许范围内。
内容的提问来源于stack exchange,提问作者fwippy
相关产品推荐
相关产品推荐

