SQL 通配符问题,奇怪的行为

SQL problem with wildcards, strange behaviour

我有这个查询:

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 CONCAT (Scopes.Name, Brands.Extension, Sites.ID, Sites.Name, CONVERT(nvarchar(MAX),Sites.Address), Sites.CAP, Sites.City, Countries.Name) Like '%BA%'

这会产生以下结果:

[

而如果我删除 %,写 "Like 'BA%'"(而不是 '%BA%'),SELECT 是空的。 我真的不明白这是为什么。

在此先感谢您的帮助。 此致,

LIKE 模式匹配 整个 字符串。

因此,'%BA%' 在字符串中的任意位置查找 'BA'。但是,'BA%' 只查找以 'BA' 开头的字符串。在您的情况下,这可能意味着 scopes.name'BA'.

开头

SQL 服务器支持 concat_ws() 的更新版本允许您执行以下操作:

WHERE CONCAT_WS('|', '|', Scopes.Name, Brands.Extension, . . .) Like '%|BA%'

这将检查每列是否以 'BA' 开头。这有点像黑客。明确一点可能更好:

WHERE Scopes.Name LIKE 'BA%' OR
      Brands.Extension LIKE 'BA%' OR
      . . .

或者也许:

WHERE 'BA' IN (LEFT(Scopes.Name, 2), LEFT(Brands.Extension, 2), . . .)