咨询SQL语句SELECT DISTINCT CITY FROM STATION WHERE CITY LIKE '[aeiou]%'无法运行的原因
为啥你的SQL语句跑不起来?
嘿,这个问题我太熟了!你写的SELECT DISTINCT CITY FROM STATION WHERE CITY LIKE '[aeiou]%';里,LIKE '[aeiou]%'是SQL Server(T-SQL)专属的正则风格通配符写法,但绝大多数其他数据库(比如MySQL、PostgreSQL、Oracle)根本不认这套语法,这就是它执行失败的核心原因~
不同数据库的正确写法
下面给你列几个主流数据库的解决方案:
MySQL/MariaDB:用
REGEXP(或RLIKE)来做正则匹配,或者用多个OR条件兜底:-- 正则写法(推荐) SELECT DISTINCT CITY FROM STATION WHERE CITY REGEXP '^[aeiou]'; -- 多OR写法(兼容性更强) SELECT DISTINCT CITY FROM STATION WHERE CITY LIKE 'a%' OR CITY LIKE 'e%' OR CITY LIKE 'i%' OR CITY LIKE 'o%' OR CITY LIKE 'u%';PostgreSQL:用
~操作符实现正则匹配,加*可以忽略大小写:-- 区分大小写 SELECT DISTINCT CITY FROM STATION WHERE CITY ~ '^[aeiou]'; -- 忽略大小写 SELECT DISTINCT CITY FROM STATION WHERE CITY ~* '^[aeiou]';Oracle:使用
REGEXP_LIKE函数,第三个参数'i'表示忽略大小写:SELECT DISTINCT CITY FROM STATION WHERE REGEXP_LIKE(CITY, '^[aeiou]', 'i');
额外说明
要记住:标准SQL里的LIKE操作符只支持%(匹配任意长度字符)和_(匹配单个字符)这两个通配符。[aeiou]这种字符组匹配是T-SQL的扩展特性,没法跨数据库通用。如果不确定自己用的是什么数据库,用多OR的写法兼容性最好~
内容的提问来源于stack exchange,提问作者chander
相关产品推荐
相关产品推荐

