SQL LIKE несколько значений - PullRequest
       2

SQL LIKE несколько значений

1 голос
/ 24 октября 2019

Я выполняю следующий SQL-код в Python:

SELECT 
    FIN AS 'LIN',
    CUSIP, 
    Borrower_Name, 
    Alias,
    DS_Maturity, 
    Spread, 
    Facility, 
    Facility_Size, 
    Log_date
FROM 
    [Main].[FacilityInformation]
WHERE 
    CUSIP IN ('00485GAC2', 'N1603LAD9')
    OR (YEAR(DS_Maturity) in (2019,2024)
    AND ((Borrower_Name LIKE 'Acosta Inc , Bright Bidco BV%'
          OR Alias LIKE 'Acosta 9/14 (18.61) Non-Extended Cov-Lite, Lumileds 2/18 Cov-Lite%')))

Он отлично работает, когда у меня есть 3 или 4 имени заемщика, или cusips или псевдоним, но я пытаюсь запустить это с десятками возможных значений,Я думаю, что следование той же логике, что и IN ('{}') с LIKE '{}%', будет работать, но это не так. Поэтому я хочу использовать эффективный код, но не что-то вроде:

SELECT * FROM table WHERE
column LIKE 'text1%'
column LIKE 'text2%'
.
.
.
column LIKE 'textn%'

Это хорошо, если каждый раз, когда вы точно знаете, сколько раз вам нужно ввести текст, даже если это трудносделайте это 30 или более раз, так что это будет очень плохо для большого количества заемщиков или псевдонимов. Это не эффективно. Надеюсь, понятно, о чем я пытаюсь спросить.

1 Ответ

1 голос
/ 24 октября 2019

Вы можете присоединиться, используя VALUES и LIKE:

-- Test data
DECLARE @s TABLE (mytext NVARCHAR(20))
INSERT INTO @s VALUES ('abc'), ('def'), ('ghi')

-- Select
SELECT
    s.mytext
FROM @s s
INNER JOIN (VALUES ('a%'),('%h%')) n(wildcard) ON s.mytext LIKE n.wildcard

Или вы можете сделать это, используя таблицу:

DECLARE @s TABLE (mytext NVARCHAR(20))
DECLARE @t TABLE (wildcard NVARCHAR(20))

INSERT INTO @s VALUES ('abc'), ('def'), ('ghi')
INSERT INTO @t VALUES ('a%'), ('%h%')

SELECT s.mytext FROM @s s
INNER JOIN @t t ON s.mytext LIKE t.wildcard

Оба дают результат:

mytext
------
abc
ghi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...