我有一个地名列表,并希望将它们与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)
对于构造而言,这是一种常见的误解
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)