【问题标题】:Can someone explain the result of this query to me?有人可以向我解释这个查询的结果吗?
【发布时间】:2011-07-31 18:54:28
【问题描述】:
SELECT 'Equal'
WHERE ' ' = ''

结果:

-----
Equal

(1 row(s) affected)

【问题讨论】:

  • 你有什么问题?
  • 字符串比较受很多因素影响,包括语言。也许您的语言环境设置不是您所期望的?

标签: sql-server tsql


【解决方案1】:

在使用 = 运算符比较字符串时,SQL Server 不考虑尾随空格。这就是为什么它认为 ' ' 等同于 ''。

这是解释语义的页面:http://support.microsoft.com/kb/316626

【讨论】:

  • 它们似乎也不计入LEN 函数。这似乎是一个奇怪的决定。
  • @Phil 我想我可以理解为什么LEN 函数是这样实现的。想象一下,您在 char(5) 字段上使用它。由于它是固定长度,如果您考虑尾随空格,那么LEN 将始终为该字段返回 5,这不是很有用。我想 99% 的时间你不会/不应该关心尾随空格。我认为如果代码依赖于存储在数据库中的尾随空格,那么我真的会质疑为什么会这样。
【解决方案2】:

SQL Server 将 ' ' = '' 评估为等于 TRUE 的布尔类型,因此它将返回您在 SELECT 中指定的字符串文字。

同样会发生:SELECT 'Equal' WHERE 1=1

【讨论】:

  • 对,但为什么' ' = ''
  • 没错,等式的左右两边是否相同,我可以理解。
猜你喜欢
  • 2011-07-14
  • 2022-10-07
  • 2021-01-06
  • 2012-04-19
  • 1970-01-01
  • 2014-10-13
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多