首页 > 解决方案 > SQL LIKE 多个值

问题描述

我在 python 中运行以下 sql 代码:

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 或别名时,它工作得很好,但我试图用几十个可能的值来运行它。我认为遵循与带有 LIKE '{}%' 的 IN ('{}') 相同的逻辑将起作用,但事实并非如此。所以我想使用一个有效的代码,但不是这样的:

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

如果每次你都知道你必须引入“文本”的确切时间,这很好,即使很难做到 30 次或更多,所以对于大量的借款人姓名或尖刺来说,这将是非常糟糕的。它效率不高。我希望很清楚我想问什么。

标签: pythonsqlsql-server

解决方案


您可以使用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

推荐阅读