在SQL中,如何使用LIKE子句及其通配符函数组合成一个条件/参数?
我正在尝试使用LIKE子句及其通配符函数(%,u,^,[…)过滤Sql Server中的代码 我的名单如下:在SQL中,如何使用LIKE子句及其通配符函数组合成一个条件/参数?,sql,sql-server,Sql,Sql Server,我正在尝试使用LIKE子句及其通配符函数(%,u,^,[…)过滤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
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
我想排除:
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)和组合的两个条件。[这是因为我们正在使用一个旧程序,我必须遵守:(]
最后,我的结果将是:
A1112K
A1114AFR
A111GCAS
A111HIV
A71111
AF1111
AQ1111
AT1111
AY1111
那么,有什么想法吗
好的,我正在使用Vision Q&A Executive设计报告。不幸的是,程序中唯一允许的标准是一行。如果我添加了另一行具有相同参数,它会将其更改为“或”而不再,因此无法满足结果
因此,使用或然后
SELECT ACNT_CODE
FROM DB
WHERE DB.ACNT_CODE LIKE '[B-Z]%'
OR DB.ACNT_CODE LIKE '[0-9]%'
OR DB.ACNT_CODE LIKE 'A[A-Y]%'
OR DB.ACNT_CODE LIKE 'A0%''
OR DB.ACNT_CODE LIKE 'A10%''
OR DB.ACNT_CODE LIKE 'A1[2-9]%'
OR DB.ACNT_CODE LIKE 'A110%''
OR DB.ACNT_CODE LIKE 'A111[2-9]%'
OR DB.ACNT_CODE LIKE 'A1110%''
OR DB.ACNT_CODE LIKE 'A1111[2-9]%'
OR DB.ACNT_CODE LIKE 'A11110%''
OR DB.ACNT_CODE LIKE 'A11111[2-9]%'
好的,我正在使用Vision Q&A Executive设计报告。不幸的是,程序中唯一允许的标准是一行。如果我添加了另一行具有相同参数,它会将其更改为“或”而不再,因此无法满足结果
因此,使用或然后
SELECT ACNT_CODE
FROM DB
WHERE DB.ACNT_CODE LIKE '[B-Z]%'
OR DB.ACNT_CODE LIKE '[0-9]%'
OR DB.ACNT_CODE LIKE 'A[A-Y]%'
OR DB.ACNT_CODE LIKE 'A0%''
OR DB.ACNT_CODE LIKE 'A10%''
OR DB.ACNT_CODE LIKE 'A1[2-9]%'
OR DB.ACNT_CODE LIKE 'A110%''
OR DB.ACNT_CODE LIKE 'A111[2-9]%'
OR DB.ACNT_CODE LIKE 'A1110%''
OR DB.ACNT_CODE LIKE 'A1111[2-9]%'
OR DB.ACNT_CODE LIKE 'A11110%''
OR DB.ACNT_CODE LIKE 'A11111[2-9]%'
你可以颠倒逻辑,得到允许的结果。我相信这是正确的逻辑:
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]%'
你可以颠倒逻辑,得到允许的结果。我相信这是正确的逻辑:
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]%'
非常感谢您提出的所有建议和回答,我非常感谢。但由于我需要的是一个带有LIKE的单一条件,因此如果解决方案不止一行,那么它将无法与软件一起工作 然而,我找到了一个解决办法,让它在一行中满足我的要求,但我不得不在当前列表中添加另一列:
- 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,如下所示:
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,如'AC[ˆHL]')相同——不包括ACHIGH01和ACLOWER01
当然,最终的结果是:
A1112K
A1114AFR
A111GCAS
A111HIV
A71111
AF1111
AQ1111
AT1111
AY1111
但是,出于SQL搜索和学习的目的,如果其他人在没有其他列的情况下找到更好的,我会将此问题留待讨论。非常感谢您的所有建议和答案,我对此表示感谢。但由于我需要的是一个带有LIKE的单一条件,因此如果解决方案不止一行,那么嗯,这个软件不行 然而,我找到了一个解决办法,让它在一行中满足我的要求,但我不得不在当前列表中添加另一列:
- 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,如下所示:
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,如'AC[ˆHL]')相同——不包括ACHIGH01和ACLOWER01
当然,最终的结果是:
A1112K
A1114AFR
A111GCAS
A111HIV
A71111
AF1111
AQ1111
AT1111
AY1111
但是,出于SQL搜索和学习的目的,如果其他人在没有其他列的情况下找到更好的条件,我会始终保留此问题。“挑战是我只能使用(01)一个条件,而不能使用(02)和组合的两个条件”为什么?我使用的是一个非常旧的程序。只接受使用1个LIKE的1个条件。如果我添加第二个LIKE,则它使用OR,但不使用更多。在条件中,您为什么删除了示例表数据和预期结果?(请注意,这里的大多数人想要格式化的文本,而不是图像。)我已经为您回滚了编辑。如果您想添加以前的额外位,请将它们添加到我们现有的信息之外,因为删除示例数据和预期结果会对问题造成巨大损害。另一方面,这里的问题似乎是您的遗留程序,而不是SQL;您最好询问您正在使用的应用程序以及如何让它接受
中的多个子句,其中
“挑战是我只能使用(01)一个条件,而不是(02)和组合的两个条件”为什么?我使用的是一个非常旧的程序。只接受使用1个LIKE的1个条件。如果我添加第二个LIKE,则它使用OR,但不使用更多。在条件中,您为什么删除了示例表数据和预期结果?(请注意,这里的大多数人想要格式化的文本,而不是图像。)我已经为您回滚了编辑。如果您想添加以前的额外位,请将它们添加到我们现有的信息之外,因为删除示例数据和预期结果会对问题造成巨大损害。另一方面,这里的问题似乎是您的遗留程序,而不是SQL;您最好询问您正在使用的应用程序以及如何让它接受WHERE
中的多个子句。感谢@GordonLinoff的尝试。但是第一个筛选器拒绝中的所有内容[^A]%“
第二个过滤器甚至会拒绝以A1开头但不完全是A11111或A1的部分所需结果A11111B@Tsiriniaina…这些字符串是通过或连接的。第一个字符串返回所有不以A开头的字符串--所有这些似乎都可以接受。第二个字符串不以AZ或A1开头--所有这些字符串都是ac可接受。等等。感谢@GordonLinoff的尝试。但是第一个筛选器拒绝了所有“[^A]%“
第二个过滤器甚至会拒绝以A1开头但不完全是A11111或A1的部分所需结果A11111B@Tsiriniaina…这些字符串是通过或连接的。第一个字符串返回所有不以A开头的字符串--所有这些似乎都可以接受。第二个字符串不以AZ或A1开头--所有这些字符串都是ac可接受的。等等。如果要求不是关于单一条件,那么我会有se