SQL新手求助:不使用NOT LIKE函数筛选不以字母'g'结尾的数据
筛选不以字母'g'结尾的数据(不用NOT LIKE)
以下是几种适用于常见SQL数据库的实现方式:
方法1:使用RIGHT函数
通过RIGHT()提取字段最后一个字符,判断其不等于'g'。注意:如果字段值为NULL,RIGHT()会返回NULL,此时不等于比较会自动排除这类行;若需要保留NULL值,需额外添加判断条件。
示例代码:
-- 排除NULL和以g结尾的行 SELECT * FROM your_table WHERE RIGHT(your_column, 1) != 'g'; -- 保留NULL,仅排除以g结尾的行 SELECT * FROM your_table WHERE RIGHT(your_column, 1) != 'g' OR your_column IS NULL;
方法2:使用SUBSTRING + LENGTH函数
如果你的数据库不支持RIGHT(),可以用SUBSTRING()结合LENGTH()获取最后一个字符,逻辑和上述方法一致。
示例代码:
SELECT * FROM your_table WHERE SUBSTRING(your_column, LENGTH(your_column), 1) != 'g'; -- 保留NULL的版本 SELECT * FROM your_table WHERE SUBSTRING(your_column, LENGTH(your_column), 1) != 'g' OR your_column IS NULL;
方法3:使用正则表达式或匹配函数
不同数据库的语法略有差异,以下是主流数据库的写法:
- MySQL/MariaDB:使用
NOT REGEXPSELECT * FROM your_table WHERE your_column NOT REGEXP 'g$'; - PostgreSQL:使用
!~操作符SELECT * FROM your_table WHERE your_column !~ 'g$'; - SQL Server:使用
PATINDEX
注:SELECT * FROM your_table WHERE PATINDEX('%g', your_column) = 0;PATINDEX('%g', your_column)会返回最后一个字符为g的位置,无匹配则返回0。
额外说明
- 空字符串(
'')会被上述方法包含,符合“不以g结尾”的需求。 - 不同数据库对字符串函数的支持有差异,比如SQL Server中
LENGTH()对应LEN(),使用时需适配你的数据库方言。
内容的提问来源于stack exchange,提问作者NGỌC NGUYỄN KIM
相关产品推荐
相关产品推荐

