【问题标题】:SQL wildcard not producing any resultsSQL 通配符不产生任何结果
【发布时间】:2020-05-11 16:11:54
【问题描述】:

我想这应该有一个相当简单的解释,但我想不出任何想法。

此查询按预期工作(结果 = 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 启动查询

【问题讨论】:

  • IN 不适用于通配符。您需要使用LIKE 运算符。而且您需要的方式是每个字段都带有OR,或者您将所有内容连接起来并在其上使用like。
  • 如果您不将通配符与运算符 LIKE 一起使用,那么它们不是通配符,它​​们只是字符。

标签: sql sql-server wildcard


【解决方案1】:

通配符适用于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 中引入的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多