【问题标题】:SQL Server query LIKE doesn't work for stringSQL Server 查询 LIKE 不适用于字符串
【发布时间】:2015-02-10 19:53:16
【问题描述】:

当我输入时,我想检索其标签 (nvarchar(1000)) 具有“奥巴马家族”的所有行:

WHERE Label LIKE '%Obama family%'

它给出了这样的行。

现在我只想要标签为“奥巴马家族”的行

我尝试了这些,它们都返回空结果:

WHERE LOWER(Label) LIKE LOWER('Obama family')
WHERE LOWER(Label) = LOWER('Obama family')
WHERE Label LIKE 'Obama family'
WHERE Label = 'Obama family'
WHERE Label LIKE N'Obama family'
WHERE Label = N'Obama family'

我试过这个:

Update [Wiki].[dbo].[Page] set [label] = RTRIM(LTRIM([label]))

并再次应用查询,仍然返回空。

【问题讨论】:

  • I want only the row that its label is 'obama family'。然后不要使用LIKE 使用等于=
  • 如果这是 SQL Server,请使用RTRIM(LTRIM(Label))
  • 试试LTRIM(RTRIM(Label))=
  • LABEL LIKE '%Obama family%' 表示“LABEL 列中包含任何包含‘奥巴马家族’的所有行”。如果您想要完全是“奥巴马家族”的行,只需使用不带百分号的'obama family'(并使用小写“o”),并使用“=”而不是“LIKE”。这是基本的 SQL;你应该找一个教程或读一本书。
  • 在 SQL Server 结果网格中,尝试复制您尝试匹配的单元格(包含“奥巴马家族”的 values 字段),然后将其粘贴到文本编辑器中。有没有表现出什么特别的东西?当您使用文本编辑器的功能搜索空格时会发生什么?我以前见过这样的情况,其中一个文本字段包含一个奇怪的字符,看起来像一个空格,但不是。

标签: sql sql-server sql-like nvarchar


【解决方案1】:

--供“奥巴马家族”使用 从表名中选择标签 其中标签 COLLATE Latin1_General_CS_AS 像“奥巴马家族”

--供“奥巴马家族”使用 从表名中选择标签 其中标签 COLLATE Latin1_General_CS_AS 像“奥巴马家族”

--供“奥巴马家族”使用 从表名中选择标签 其中标签 COLLATE Latin1_General_CS_AS 像“奥巴马家族”

--供“奥巴马家族”使用 从表名中选择标签 其中标签 COLLATE Latin1_General_CS_AS 像“奥巴马家族”

【讨论】:

  • 我发现标签末尾有一个换行符,所以我执行了这个: UPDATE [page] Set [label] = REPLACE(REPLACE([label], CHAR(10), ''), CHAR(13), ''),现在我在问题中提到的旧版本的查询运行正常,所以我不确定你的方法是否可行:) 谢谢无论如何。
猜你喜欢
  • 2020-02-21
  • 2017-03-11
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 2012-02-18
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多