使用 SQL IN 和 LIKE 匹配模式列表
Match a list of patterns using SQL IN and LIKE
是否可以匹配 SQL 中的模式列表?
我知道以下匹配单个模式的方法:
SELECT * FROM table where title LIKE '%match%'
这可以像这样扩展;
SELECT * FROM table
where title LIKE '%match%' OR title LIKE '%match2%'
...等等
我有一长串模式,是否可以以任何方式使用 'IN' 以使代码更具可读性?
像这样的东西
SELECT * FROM table where title LIKE IN (match, match2, match3)
还是我被迫写了很多“OR”?
编辑:正在使用 SQL-Alchemy(Python 库)连接到 Microsoft SQL 服务器。
好的!在 Microsoft SQL Server 中有一种方法可以做到这一点。
SELECT *
FROM employees
WHERE last_name LIKE 'match_'
其中 _ 可以是任何其他字母
但你也可以更具体地描述更复杂的模式
SELECT * FROM titles WHERE title LIKE '[a-t]itanic'
在这里您将获得所有这些组合 aitanic 等。
但我认为最简单的方法就是匹配您所说的 %text% 并应用 OR
如果您的数据库是 postgres,您可以使用类似的东西:
WHERE title ~~ ANY('{%foo%,%bar%,%baz%}');
来自this SO post。我还没有找到任何可与 Azure SQL.
相媲美的东西
是否可以匹配 SQL 中的模式列表?
我知道以下匹配单个模式的方法:
SELECT * FROM table where title LIKE '%match%'
这可以像这样扩展;
SELECT * FROM table
where title LIKE '%match%' OR title LIKE '%match2%'
...等等
我有一长串模式,是否可以以任何方式使用 'IN' 以使代码更具可读性?
像这样的东西
SELECT * FROM table where title LIKE IN (match, match2, match3)
还是我被迫写了很多“OR”?
编辑:正在使用 SQL-Alchemy(Python 库)连接到 Microsoft SQL 服务器。
好的!在 Microsoft SQL Server 中有一种方法可以做到这一点。
SELECT *
FROM employees
WHERE last_name LIKE 'match_'
其中 _ 可以是任何其他字母 但你也可以更具体地描述更复杂的模式
SELECT * FROM titles WHERE title LIKE '[a-t]itanic'
在这里您将获得所有这些组合 aitanic 等。 但我认为最简单的方法就是匹配您所说的 %text% 并应用 OR
如果您的数据库是 postgres,您可以使用类似的东西:
WHERE title ~~ ANY('{%foo%,%bar%,%baz%}');
来自this SO post。我还没有找到任何可与 Azure SQL.
相媲美的东西