【问题标题】:SQL Server - LIKE Operator Works When Searching Partial String But Not Whole StringSQL Server - LIKE 运算符在搜索部分字符串但不是整个字符串时起作用
【发布时间】:2018-01-27 12:07:16
【问题描述】:

我的 SQL Server 数据库遇到问题,说实话,我什至不知道该如何描述。因此,我会尽力展示它。

我有一个包含几行的表,其中[Meter Name] 列中的值为

Electric Meter #140002054 Acct.2013147 House, south mall service &&parking lot

现在,当我运行以下查询时,我得到的结果正是我所期望的。

select distinct [Meter Name] 
from Last_PM_Export
where [Meter Name] like 'Electric Meter #140002054 Acct.2013147 House, south mall service%'

请注意,我使用的是 % 通配符,在“服务”一词之后立即切断搜索模式。我得到以下结果。

Expected result using partial string

同样,这正是我所期望的。没问题。

现在,观察当我扩展模式以包含紧跟在“服务”一词之后的空格时会发生什么。

select distinct [Meter Name] 
from Last_PM_Export
where [Meter Name] like 'Electric Meter #140002054 Acct.2013147 House, south mall service %'

Unexpected result using partial string

如您所见,查询没有返回任何结果。我也试过查询整个字符串,直接从表中复制出来。

select distinct [Meter Name] 
from Last_PM_Export
where [Meter Name] like 'Electric Meter #140002054 Acct.2013147 House, south mall service &&parking lot'

结果与上面的查询相同。没有结果。

我想不出这应该发生的任何原因。它与我如何理解 LIKE 运算符的工作方式背道而驰。我咨询了我们办公室的 IT 人员,他同意这是不寻常的。

再次,我知道这不是对问题的很好描述,但希望演示就足够了。此外,对于无法更充分地共享表或数据库,我深表歉意,但出于保密原因,我不能这样做。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 也许“服务”后面的那个空格不是空格。
  • 获取一个十六进制编辑器来检查空格和两个 & 是什么。有可能所有三个都是控制字符。当数据操作员将地址复制并粘贴到我们的数据库中时,我经常会遇到这种情况。
  • 您可以查看页面上的数据并检查它实际上是在“服务”之后的“”
  • 您是否复制'n'paste上面的文本(直接从结果视图中取出到此消息中)?
  • 我无法复制它...该列的数据类型是什么(varcharnvarchar、其他)?有没有奇怪的排序?我记得有一个愚蠢的问题,双 A 表示斯堪的纳维亚语言中的不同字母......

标签: sql sql-server string sql-like


【解决方案1】:

不是一个答案,但有很多评论......请您确认一下,这是您问题的确切情况吗?您可以轻松查看,SELECTs 都返回正确的行...

DECLARE @mockup TABLE([Meter Name] VARCHAR(1000));
INSERT INTO @mockup VALUES('Electric Meter #140002054 Acct.2013147 House, south mall service &&parking lot')
                         ,('Electric Meter #140002054 Acct.2013147 House, south mall service &&some other')
                         ,('different');

--没有空格

SELECT * FROM @mockup 
where [Meter Name] like 'Electric Meter #140002054 Acct.2013147 House, south mall service%';

--带空格

SELECT * FROM @mockup 
where [Meter Name] like 'Electric Meter #140002054 Acct.2013147 House, south mall service %';

可能还有更多内容,您为了简洁而减少了?您能否更改上述模型以使您的问题可重现?

【讨论】:

  • 这很有帮助,并提供了对问题根源的一些见解。当简单地从查询结果中复制值时,我无法使用模型表重现该问题。但是,我调查了进入表格的数据的来源,即 CSV 文件。事实证明,源单元格包含回车符。我怀疑当数据被导入时,回车也是如此。但是,它隐藏在数据库中。当我从 CSV 单元粘贴到您的模型中时,我能够重现该问题。感谢您的帮助。
  • @J.P.Brown 很高兴为您提供帮助! grid-view 将省略换行符。您可能会切换到 output-to-text... 是的:这些问题让您怀疑自己的想法 :-D
猜你喜欢
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 2011-02-05
相关资源
最近更新 更多