SQL Server查询需求:如何排除以8或9结尾的航班号结果?
问题解决方法
你的SQL报错是因为NOT LIKE ('%8','%9')的写法不符合语法规范,LIKE运算符只能搭配单个匹配模式,不能直接用括号传多个值。要满足作业“仅用一个条件/运算符”的要求,有几种可行的写法:
方法1:字符范围匹配(适配SQL Server、Access等支持通配符范围的数据库)
SELECT ID_VOL, DATE_DEP, ESCALE FROM VOL WHERE ID_VOL NOT LIKE '%[89]' AND DATE_DEP BETWEEN '2005-09-01' AND '2006-12-30'
这里%[89]表示匹配以8或9结尾的字符串,加上NOT就排除了这类航班号,属于单个LIKE条件。
方法2:RIGHT函数结合NOT IN(通用多数数据库)
SELECT ID_VOL, DATE_DEP, ESCALE FROM VOL WHERE RIGHT(ID_VOL, 1) NOT IN ('8', '9') AND DATE_DEP BETWEEN '2005-09-01' AND '2006-12-30'
RIGHT(ID_VOL,1)提取航班号最后一位,用NOT IN直接排除8和9,这是单个条件,符合作业要求。
方法3:正则表达式(适配MySQL、PostgreSQL等支持正则的数据库)
MySQL写法:
SELECT ID_VOL, DATE_DEP, ESCALE FROM VOL WHERE ID_VOL NOT REGEXP '[89]$' AND DATE_DEP BETWEEN '2005-09-01' AND '2006-12-30'
PostgreSQL写法:
SELECT ID_VOL, DATE_DEP, ESCALE FROM VOL WHERE ID_VOL !~ '[89]$' AND DATE_DEP BETWEEN '2005-09-01' AND '2006-12-30'
正则[89]$匹配以8或9结尾的字符串,通过NOT REGEXP或!~实现排除,属于单个条件。
内容的提问来源于stack exchange,提问作者Alex d'Astous
相关产品推荐
相关产品推荐

