我正在 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 或尖头。这效率不高。我希望我想问的问题很清楚。
最佳答案
您可以使用 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
关于python - SQL LIKE 多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58542886/