使用t-sql组合'LIKE'和'IN'

Pan*_*fas 35 sql t-sql sql-server

我该怎么做这种选择:

SELECT * 
FROM Street 
WHERE StreetName LIKE IN ('% Main Street', 'foo %')
Run Code Online (Sandbox Code Playgroud)

请不要告诉我,我可以使用,OR因为这些实际上来自查询.

Mar*_*ith 36

有没有合并LIKEIN语法,但你可以使用LIKEJOIN下面到您的查询.

;WITH Query(Result) As
(
SELECT '% Main Street' UNION ALL
SELECT 'foo %'
)
SELECT DISTINCT s.* 
FROM Street s
JOIN Query q ON StreetName LIKE q.Result
Run Code Online (Sandbox Code Playgroud)

或者在评论中使用您的示例

SELECT DISTINCT s.* 
FROM Street s
JOIN CarStreets cs ON s.StreetName LIKE cs.name + '%'
WHERE cs.Streets = 'offroad'
Run Code Online (Sandbox Code Playgroud)

  • @Peter - 您可能希望花一些时间来编辑您的问题,以便明确.写的问题不建议动态sql.相反,它表明你想要一个多样化的场景.此外,@ Martin的解决方案可以根据参数调整为非常动态 - 您可以对值为UDF的表执行CSV拆分操作并加入其中. (3认同)

Jam*_*ill 6

你在这里没有很多选择。

SELECT * FROM Street Where StreetName LIKE '% Main Street' OR StreetName LIKE 'foo %'
Run Code Online (Sandbox Code Playgroud)

如果这是现有的、更复杂的查询的一部分(这是我得到的印象),您可以创建一个表值函数来为您进行检查。

SELECT * FROM Street Where StreetName IN (dbo.FindStreetNameFunction('% Main Street|foo %'))
Run Code Online (Sandbox Code Playgroud)

我建议使用最简单的解决方案(第一个)。如果它嵌套在一个更大、更复杂的查询中,请将其发布,我们将查看。