【问题标题】:WHERE clause on VARCHAR column seems to operate as a LIKEVARCHAR 列上的 WHERE 子句似乎作为 LIKE 操作
【发布时间】:2013-03-06 12:51:45
【问题描述】:

我偶然发现了一种我以前从未见过的情况。我希望有人可以解释以下内容。

我已经运行了以下查询,希望只得到值正好等于1101的列的结果

select '--' + MyColumn + '--' SeeSpaces, Len(MyColumn) as LengthOfColumn 
from MyTable 
where MyColumn = '1101'

但是,我也看到 1101 后跟(我相信是)空格的值。

所以SeeSpaces 返回

--1101    --

LengthOfColumn 返回4

MyColumnVARCHAR(8), NOT NULL 列。它的值(包括空格)是通过单独的工作流程插入的。

为什么这个选择不只返回确切的结果?

提前致谢

【问题讨论】:

    标签: sql-server select sql-like varchar


    【解决方案1】:

    原因在于 SQL Server 比较字符串和尾随空格的方式,它遵循 ANSI 标准,因此字符串 '1101' 和 '1101' 是等价的。

    查看以下内容了解更多详情:

    INF: How SQL Server Compares Strings with Trailing Spaces

    【讨论】:

    • 谢谢...这向我解释了。也感谢你以成人的方式回答,而不是第一张海报。
    【解决方案2】:

    我认为你必须在比较时使用LTRIM() and RTRIM()函数:

    LTRIM(RTRIM(MYCOLUMN))='1101' 
    

    另外LEN 函数不计算空格,它只计算字符串中的字符。请参考:http://msdn.microsoft.com/en-us/library/ms190329%28SQL.90%29.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-10
      • 2011-03-12
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      相关资源
      最近更新 更多