Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么我的查询使用RIGHT()和LEFT()函数,而不使用LIKE谓词?_Sql_Sql Server - Fatal编程技术网

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)。