SQL 通配符未产生任何结果
SQL wildcard not producing any results
我想对此应该有一个相当简单的解释,但我想不出任何想法。
此查询按预期工作(结果 = 1 行):
SELECT Sites.Master_ID AS Master_ID, Scopes.Name AS Scope, Brands.Extension AS [Brand], Sites.ID AS [Site ID], Sites.Name AS [Site Name], Sites.Address, Sites.CAP, Sites.City, Countries.Name AS Country
FROM Sites
INNER JOIN Scopes ON Sites.scope_ID = Scopes.ID INNER JOIN Brands ON Sites.brand_ID = Brands.ID
INNER JOIN Countries ON Sites.country_ID = Countries.ID
WHERE 'BA001' IN (Scopes.Name, Brands.Extension, Sites.ID, Sites.Name, CONVERT(nvarchar(MAX),Sites.Address), Sites.CAP, Sites.City, Countries.Name)
添加通配符时它不是(结果 = 0 行):
SELECT Sites.Master_ID AS Master_ID, Scopes.Name AS Scope, Brands.Extension AS [Brand], Sites.ID AS [Site ID], Sites.Name AS [Site Name], Sites.Address, Sites.CAP, Sites.City, Countries.Name AS Country
FROM Sites
INNER JOIN Scopes ON Sites.scope_ID = Scopes.ID INNER JOIN Brands ON Sites.brand_ID = Brands.ID
INNER JOIN Countries ON Sites.country_ID = Countries.ID
WHERE '%BA001%' IN (Scopes.Name, Brands.Extension, Sites.ID, Sites.Name, CONVERT(nvarchar(MAX),Sites.Address), Sites.CAP, Sites.City, Countries.Name)
我使用通配符的方式是否正确?
期待您的回复。
非常感谢。
PS:我正在从 SQL Server Management Studio 18.4
启动查询
通配符适用于 LIKE
,不适用于 IN
。
您可以将值连接在一起:
WHERE CONCAT(Scopes.Name, Brands.Extension, Sites.ID, Sites.Name, CONVERT(nvarchar(MAX),Sites.Address), Sites.CAP, Sites.City, Countries.Name) LIKE '%BA001%'
您可能想要包括分隔符:
WHERE CONCAT_WS('|', Scopes.Name, Brands.Extension, Sites.ID, Sites.Name, CONVERT(nvarchar(MAX),Sites.Address), Sites.CAP, Sites.City, Countries.Name) LIKE '%BA001%'
CONCAT_WS()
是在 SQL Server 2017 中引入的。
我想对此应该有一个相当简单的解释,但我想不出任何想法。
此查询按预期工作(结果 = 1 行):
SELECT Sites.Master_ID AS Master_ID, Scopes.Name AS Scope, Brands.Extension AS [Brand], Sites.ID AS [Site ID], Sites.Name AS [Site Name], Sites.Address, Sites.CAP, Sites.City, Countries.Name AS Country
FROM Sites
INNER JOIN Scopes ON Sites.scope_ID = Scopes.ID INNER JOIN Brands ON Sites.brand_ID = Brands.ID
INNER JOIN Countries ON Sites.country_ID = Countries.ID
WHERE 'BA001' IN (Scopes.Name, Brands.Extension, Sites.ID, Sites.Name, CONVERT(nvarchar(MAX),Sites.Address), Sites.CAP, Sites.City, Countries.Name)
添加通配符时它不是(结果 = 0 行):
SELECT Sites.Master_ID AS Master_ID, Scopes.Name AS Scope, Brands.Extension AS [Brand], Sites.ID AS [Site ID], Sites.Name AS [Site Name], Sites.Address, Sites.CAP, Sites.City, Countries.Name AS Country
FROM Sites
INNER JOIN Scopes ON Sites.scope_ID = Scopes.ID INNER JOIN Brands ON Sites.brand_ID = Brands.ID
INNER JOIN Countries ON Sites.country_ID = Countries.ID
WHERE '%BA001%' IN (Scopes.Name, Brands.Extension, Sites.ID, Sites.Name, CONVERT(nvarchar(MAX),Sites.Address), Sites.CAP, Sites.City, Countries.Name)
我使用通配符的方式是否正确?
期待您的回复。 非常感谢。
PS:我正在从 SQL Server Management Studio 18.4
启动查询通配符适用于 LIKE
,不适用于 IN
。
您可以将值连接在一起:
WHERE CONCAT(Scopes.Name, Brands.Extension, Sites.ID, Sites.Name, CONVERT(nvarchar(MAX),Sites.Address), Sites.CAP, Sites.City, Countries.Name) LIKE '%BA001%'
您可能想要包括分隔符:
WHERE CONCAT_WS('|', Scopes.Name, Brands.Extension, Sites.ID, Sites.Name, CONVERT(nvarchar(MAX),Sites.Address), Sites.CAP, Sites.City, Countries.Name) LIKE '%BA001%'
CONCAT_WS()
是在 SQL Server 2017 中引入的。