查询不以元音开头的name的SQL语句执行无输出问题求助
问题原因及解决方法
核心原因:通配符语法不兼容
你使用的LIKE '[!aeiou]%'是SQL Server专属的否定字符范围语法,但如果你的数据库是MySQL、PostgreSQL、SQLite等其他主流数据库,这个写法不会被识别——这些数据库中,否定字符范围的正确写法是[^aeiou]。
当数据库无法解析[!aeiou]时,会将其当作普通字符串字面量匹配,而你的数据里没有任何name字段是以[!aeiou]开头的,因此返回空结果。
次要潜在问题:CHAR类型的空格填充
你的name字段定义为char(10),所有插入的字符串会被自动填充空格至10位(比如sukesh会变成sukesh )。虽然这不会直接导致当前查询无结果,但后续做精确匹配时可能引发问题,建议改为varchar(10)避免不必要的空格填充。
修正后的查询语句
根据你的数据库类型选择对应写法:
1. 适用于MySQL、PostgreSQL、SQLite等
SELECT * FROM test WHERE name LIKE '[^aeiou]%';
2. 适用于SQL Server(原写法理论有效,若仍无结果可检查大小写)
如果使用SQL Server但仍无结果,可能是大小写敏感问题,可调整为不区分大小写的匹配:
SELECT * FROM test WHERE name LIKE '[!AEIOUaeiou]%';
或者指定不区分大小写的排序规则:
SELECT * FROM test WHERE name LIKE '[!aeiou]%' COLLATE SQL_Latin1_General_CP1_CI_AS;
内容的提问来源于stack exchange,提问作者Arvind SHa
相关产品推荐
相关产品推荐

