Sql 为什么我的查询使用RIGHT()和LEFT()函数,而不使用LIKE谓词?
我想得到所有列值不以元音开头或结尾的行。但是,如果我试图通过使用Sql 为什么我的查询使用RIGHT()和LEFT()函数,而不使用LIKE谓词?,sql,sql-server,Sql,Sql Server,我想得到所有列值不以元音开头或结尾的行。但是,如果我试图通过使用LIKE谓词来确定WHERE子句中的条件,我会得到一个运行时错误 select distinct COLUMN from TABLE where COLUMN not like '[aeiou]%[aeiou]' 如果我使用RIGHT和LEFT函数这样做,我的查询工作正常 select distinct COLUMN from TABLE where (left(COLUMN, 1) not in ('a','e','i','o'
LIKE
谓词来确定WHERE
子句中的条件,我会得到一个运行时错误
select distinct COLUMN
from TABLE
where COLUMN not like '[aeiou]%[aeiou]'
如果我使用RIGHT和LEFT函数这样做,我的查询工作正常
select distinct COLUMN
from TABLE where (left(COLUMN, 1) not in ('a','e','i','o','u')
and right(COLUMN, 1) not in ('a','e','i','o','u'))```
不过,这是一个相当长且多余的选择。我想了解为什么第一个不起作用,或者我只是做错了什么。以下的等效比较:
COLUMN not like '[aeiou]%[aeiou]'
使用或
,而不是和
:
where left(COLUMN, 1) not in ('a','e','i','o','u') or
right(COLUMN, 1) not in ('a','e','i','o','u')
或相当于:
where not (left(COLUMN, 1) in ('a','e','i','o','u') and
right(COLUMN, 1) in ('a','e','i','o','u')
)
(因为“not(a和b)”在逻辑上与“not a或not b”相同)
以“迈阿密”的公平城市为例。与
不相似,因为它不以元音开头和结尾。它只需通过一次比较就可以了。以下的等效比较:
COLUMN not like '[aeiou]%[aeiou]'
使用或
,而不是和
:
where left(COLUMN, 1) not in ('a','e','i','o','u') or
right(COLUMN, 1) not in ('a','e','i','o','u')
或相当于:
where not (left(COLUMN, 1) in ('a','e','i','o','u') and
right(COLUMN, 1) in ('a','e','i','o','u')
)
(因为“not(a和b)”在逻辑上与“not a或not b”相同)
想想迈阿密这个美丽的城市吧。它与不相似,因为它不以元音开头和结尾。虽然我现在意识到我的问题可能有点模棱两可,但我想我通过我的查询更好地理解了这个问题。我希望我的'not like'条件为我带来与“not a and not b”条件相同的行,这将排除'Miami'作为结果。布尔陷阱无处不在。布尔陷阱无处不在。@SamaraGama使用like
你不能做你想做的事情,因为like是和,你需要或(SQL Server不支持regex)。虽然我现在意识到我的问题可能有点含糊不清,但我想我对我的查询理解得更好一些。我希望我的'not like'条件为我带来与“not a and not b”条件相同的行,这将排除'Miami'作为结果。布尔陷阱无处不在。布尔陷阱无处不在。@SamaraGama您不能使用like
做您想做的事情,因为like是和
,您需要或
(SQL Server不支持regex)。