是否可以使用LIKE和IN作为WHERE语句?

Euc*_*lid 9 sql

我有一个地名列表,并希望将它们与sql数据库中的记录相匹配,问题是属性后面有名称的参考号.例如.'Ballymena P-4sdf5g'是否可以使用IN和LIKE来匹配记录

WHERE dbo.[Places].[Name] IN LIKE('Ballymena%','Banger%')
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 12

不,但您可以使用OR代替:

WHERE (dbo.[Places].[Name] LIKE 'Ballymena%' OR
       dbo.[Places].[Name] LIKE 'Banger%')
Run Code Online (Sandbox Code Playgroud)


one*_*hen 9

对于构造而言,这是一种常见的误解

b IN (x, y, z)
Run Code Online (Sandbox Code Playgroud)

(x, y, z)表示一组.它不是.

相反,它仅仅是语法糖

(b = x OR b = y OR b = z)
Run Code Online (Sandbox Code Playgroud)

SQL只有一个数据结构:表.如果要将搜索文本值作为一个集进行查询,请将它们放入表中.你可以在条件中使用JOIN你的搜索文本表到你的Places桌子LIKEJOIN

WITH Places (Name)
     AS
     (
      SELECT Name
        FROM (
              VALUES ('Ballymeade Country Club'), 
                     ('Ballymena Candles'), 
                     ('Bangers & Mash Cafe'), 
                     ('Bangebis')
             ) AS Places (Name)
     ), 
     SearchText (search_text)
     AS
     (
      SELECT search_text
        FROM (
              VALUES ('Ballymena'), 
                     ('Banger')
             ) AS SearchText (search_text)
     )
SELECT * 
  FROM Places AS P1
       LEFT OUTER JOIN SearchText AS S1
          ON P1.Name LIKE S1.search_text + '%';
Run Code Online (Sandbox Code Playgroud)