Как в SQL объединить в одно условие / параметр, используя предложение LIKE и его подстановочные функции? - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь отфильтровать коды в Sql Server с помощью предложения LIKE и его подстановочных функций (%, _, ^, [] ...)

Мой список выглядит следующим образом:

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

И я хочу исключить:

  1. Что-нибудь , начинающееся с 'AZ'
  2. Ичто-нибудь , начинающееся точно с 'A11111'

Я знаю, что Sql Code будет работать так:

SELECT ACNT_CODE
FROM DB
WHERE (DB.ACNT_CODE NOT LIKE 'A[Z]%' AND DB.ACNT_CODE NOT LIKE 'A11111%')

Но мне нужно объединить предложение Where в ONE SINGLE Только условие Примерно так:

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

Итак, любая идеяпожалуйста

Ответы [ 3 ]

1 голос
/ 07 июня 2019

Большое спасибо за все ваши предложения и ответы, которые я ценю.Но так как мне нужно ЕДИНОЕ СОСТОЯНИЕ С ПОДОБНЫМ , поэтому, если решение содержит более одной строки, оно не будет работать с программным обеспечением.

Однако я нашел работугде-то, чтобы встретить то, что я хочу, в одной строке, но мне пришлось добавить еще один столбец с текущим списком:

- 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 я оставляю этот вопрос всегда открытым, если кто-то найдет лучший вопрос без другого столбца.

1 голос
/ 05 июня 2019

Хорошо, я использую 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]%'
0 голосов
/ 05 июня 2019

Вы можете инвертировать логику, чтобы получить то, что разрешено . Я считаю, что это правильная логика:

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]%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...