我正在尝试使用 LIKE子句及其通配符函数(%,_,^,[] ...)
过滤Sql Server中的代码>我的列表如下:
A11111
A11111B
A1112K
A1114AFR
A111GCAS
A111HIV
A71111
AF1111
AQ1111
AT1111
AY1111
AZ11EGWHI
AZ11MEDIA
AZ2111
AZ3111
AZ4111
AZA111
AZB111
AZC111
AZI1111
AZM111
AZN111
AZN1AD
AZO111
AZP111
AZS111
AZU111
AZXT11
AZXT11B
我想排除:
我知道Sql代码将像这样工作:
SELECT ACNT_CODE
FROM DB
WHERE (DB.ACNT_CODE NOT LIKE 'A[Z]%' AND DB.ACNT_CODE NOT LIKE 'A11111%')
但是我需要在仅一个条件中组合Where子句 像这样:
SELECT ACNT_CODE
FROM DB
WHERE (DB.ACNT_CODE NOT LIKE 'A[1Z]%')
--->但是,当我使用它时,它仍然包括以A1xxx开头的内容,而不是完全以A11111%开头的内容
--->挑战是我只能使用(01)一个单一条件,而不是(02)两个条件由AND组合。 [这是由于我们使用的是旧程序,并且我必须遵守:(]
最后,我的结果应该是这样:
A1112K
A1114AFR
A111GCAS
A111HIV
A71111
AF1111
AQ1111
AT1111
AY1111
那么,有什么想法吗?
答案 0 :(得分:1)
好的,我正在使用Vision Q&A Executive设计报告。不幸的是,程序中唯一允许的标准是“单行”。如果我添加另一行具有相同参数的行,则会将其更改为OR,而不再是AND,因此结果不符合
然后使用OR。
do
{
Console.WriteLine("Insert items that you want to buy, when you are finnish, write 'done'");
Console.Write("Insert a item: ");
string item = Console.ReadLine();
switch (item.ToLower())
{
case "done":
break;
default:
Console.WriteLine("Write a price:");
decimal price = Convert.ToDecimal(Console.ReadLine());
var foo(i) = new Items(item, price);
Console.Write(" {0} {1} ", foo.Item, foo.Price);
break;
}
i++;
} while (item != "done");
//Then show the list in order
答案 1 :(得分:1)
非常感谢您提出的所有命题和答案,我非常感谢。但是由于我需要的是像这样的单一条件,因此,如果解决方案多于一行,那么它将无法与该软件一起使用。
但是,我找到了解决方法,使其可以在一行中满足我的要求,但是我不得不在“当前列表”中添加另一列:
- ACNT_CODE - - TYPE -
A11111 ACHIGH01
A11111B ACHIGH01
A1112K ACOTHER01
A1114AFR ACOTHER01
A111GCAS ACOTHER01
A111HIV ACOTHER01
A71111 ACOTHER01
AF1111 ACOTHER01
AQ1111 ACOTHER01
AT1111 ACOTHER01
AY1111 ACOTHER01
AZ11EGWHI ACLOWER01
AZ11MEDIA ACLOWER01
AZ2111 ACLOWER01
AZ3111 ACLOWER01
AZ4111 ACLOWER01
AZA111 ACLOWER01
AZB111 ACLOWER01
AZC111 ACLOWER01
AZI1111 ACLOWER01
AZM111 ACLOWER01
AZN111 ACLOWER01
AZN1AD ACLOWER01
AZO111 ACLOWER01
AZP111 ACLOWER01
AZS111 ACLOWER01
AZU111 ACLOWER01
AZXT11 ACLOWER01
AZXT11B ACLOWER01
然后在我的SQL中,我使用相同的 LIKE和SINGLE CONDITION ,如下所示:
SELECT ACNT_CODE
FROM DB
WHERE (DB.TYPE NOT LIKE 'AC[HL]%') --Excluse ACHIGH01 & ACLOWER01
或更简单的一个:
SELECT ACNT_CODE
FROM DB
WHERE (DB.TYPE LIKE 'AC[O]%') --Include only ACOTHER01
与WHERE (DB.TYPE LIKE 'AC[ˆHL]%') --Excluse ACHIGH01 & ACLOWER01
肯定的是,结果是这样的:
A1112K
A1114AFR
A111GCAS
A111HIV
A71111
AF1111
AQ1111
AT1111
AY1111
但是,出于SQL搜索和学习的目的,如果其他人在没有其他专栏的情况下找到了更好的答案,则我始终将这个问题悬而未决。
答案 2 :(得分:0)
您可以反转逻辑以获取允许的 。我相信这是正确的逻辑:
WHERE DB.ACNT_CODE LIKE '[^A]%' OR
DB.ACNT_CODE LIKE 'A[^Z1]%' OR
DB.ACNT_CODE LIKE 'A1[^1]%' OR
DB.ACNT_CODE LIKE 'A11[^1]%' OR
DB.ACNT_CODE LIKE 'A111[^1]%' OR
DB.ACNT_CODE LIKE 'A1111[^1]%'