python - 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 次或更多,所以对于大量的借款人姓名或尖刺来说,这将是非常糟糕的。它效率不高。我希望很清楚我想问什么。
解决方案
您可以使用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
推荐阅读
- javascript - React/Redux 在第一个动作完成后立即触发动作
- reactjs - 当 useState 值更改时,React 组件中的 setInterval 会重复
- php - 如何将秒格式化为时间而不显示不必要的零
- macos - OS X 上的 CSS 颜色在 Safari 和 Chrome 中显示不正确,但在 Firefox 中正确显示(可能“已解决”)
- hadoop - sqoop会删除所有现有的数据文件吗?
- java - 从另一个应用程序启动 spring boot
- javascript - REST api 未使用 POST 添加正确的详细信息
- typo3 - 新闻:类别中的单视图页面不起作用
- javascript - 排序表中的数组顺序
- java - 是否有任何功能可以删除我的代码中的 (",")