gpt4 book ai didi

SQL:尝试避免使用某些元素的名称

转载 作者:行者123 更新时间:2023-12-03 23:31:27 25 4
gpt4 key购买 nike

基本上,我正在尝试查找名称中没有 (GS) 或 (TD) 的产品。我尝试实现这个:

AND c.name NOT IN ('%(TD)%', '%(GS)%')

但这并没有过滤掉包含这些元素的名称,所以现在我只能写这段讨厌的代码了:

AND c.name NOT LIKE '%(TD)%'
AND c.name NOT LIKE '%(GS)%'

我知道这是一个超出基本问题的问题,可能有人在这里问过这个问题,也许我在搜索时措辞不正确。很想找到一种更有效地编写此代码的方法,这让我抓狂。

编辑:尽管第二种方法是正确的,但我不明白下面的代码是如何工作的:

c.name IN ('%Jordan%', '%adidas%').

按照这个逻辑,为什么我原来的方法行不通? IN 运算符的全部意义在于让这一切变得方便。

最佳答案

您上次的编辑无效。 IN 运算符确定指定值是否与子查询或列表中的任何值匹配,返回 Boolean。这与使用 OR= 的方式相同。也就是说,

select column from table where column in ('a', 'b')

相同
select column from table where column = 'a' or column = 'b'

LIKE 允许您使用通配符和一些淡化正则表达式之类的表达式。但是你不能混合这些。例如,您编辑的查询不会返回任何关于 Jordan 或 Adidas 的结果。

declare @table table (name varchar(64))
insert into @table
values
('Jordan'),
('adidas'),
('Jordans'),
('adidass')

select *
from @table
where name in ('%Jordan%','%adidas%')

这是因为这个查询被计算为

select * from @table where name = '%Jordan%' or name = '%adidas%'

注意 % 在这里被视为字符串文字的一部分,而不是通配符。

关于SQL:尝试避免使用某些元素的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51143912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com