【问题标题】:T-SQL like not working like expected - returning LESS hits than the same query using =T-SQL 不像预期的那样工作 - 返回比使用 = 的相同查询更少的命中
【发布时间】:2015-01-11 17:14:08
【问题描述】:

我在一个表中有两行包含“名称”列中的相同信息(nvarchar(50),不为空)。

SELECT * FROM TableName WHERE ColumnName = 'ColumnValue' 

返回两行

SELECT * FROM TableName WHERE ColumnName LIKE 'ColumnValue'

返回仅一行

有人知道是什么原因导致了这种行为吗?

【问题讨论】:

  • 您的列值是否有尾随空格。

标签: sql sql-server tsql sql-like


【解决方案1】:

使用like时我总是使用%

把你喜欢的语句改成

SELECT * FROM TableName WHERE ColumnName LIKE '%ColumnValue%'

使用确切的列值总是更好,但有时您不记得确切的字符串太长了。

【讨论】:

    【解决方案2】:

    这可能是由于尾随空格造成的。执行= 操作会排除尾随空格,但LIKE 不会。

    例如,这将返回一个匹配项:

    SELECT 'match' WHERE 'fred' = 'fred   '
    

    但这不会:

    SELECT 'match' WHERE 'fred' LIKE 'fred   '
    

    【讨论】:

    • 你是摇滚明星!我不知道空格是如何进入数据库的,但是在执行以下更新 TableName set ColumnName = ltrim(rtrim(ColumnName)) where ColumnName = 'ColumnValue' 似乎已经解决了这个问题!谢谢!
    • 很高兴知道这一点
    • 该行为不是可选的。 ANSI 填充不会影响这一点。
    猜你喜欢
    • 2013-08-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    相关资源
    最近更新 更多