python - SQL LIKE 多个值

标签 python sql sql-server

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

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

如果每次您都知道必须引入“文本”的确切次数,那么这很好,即使很难做到 30 次或更多,因此对于大量的borrower_names 或尖头。这效率不高。我希望我想问的问题很清楚。

最佳答案

您可以使用 VALUESLIKE 加入:

-- 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

关于python - SQL LIKE 多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58542886/

相关文章:

sql-server - T-SQL 触发器和表名

.net - 如何编写 Visual Studio 数据库项目的部署脚本?

python - 如何按主色自动分类图像?

python - 在 docopt 中实现 HTTPie

mysql - 如何使用like在sql上选择限制性数据

mysql - SQL 根据每个连接记录的事务表中的最新条目连接多个表

python - "Exception ignored in"是什么类型的消息?

python - 对于 bool 输入,numpy.where 和 numpy.argwhere 之间有什么区别?

mysql - 如何在mysql表中插入嵌套的json数据?

java - SQL Server 中的日期提取问题