【发布时间】:2010-11-26 20:33:32
【问题描述】:
今天早上我遇到了一些奇怪的事情,并认为我应该提交它以供评论。
有人可以解释为什么以下 SQL 查询在针对 SQL 2008 运行时会打印“等于”。数据库兼容性级别设置为 100。
if '' = ' '
print 'equal'
else
print 'not equal'
这会返回 0:
select (LEN(' '))
它似乎在自动修剪空间。我不知道在以前版本的 SQL Server 中是否是这种情况,而且我已经没有任何地方可以测试它了。
我遇到了这个问题,因为生产查询返回了不正确的结果。我在任何地方都找不到这种行为的记录。
有人知道这方面的信息吗?
【问题讨论】:
-
SQL 2005:选择 len(' ') 返回 0
-
在 Sql Server 2000 上也是如此。
-
这是一个有趣的问题。无论您在任一字符串中放置多少空格,无论它们是否匹配,它似乎都返回相等。经过更多的实验后,我注意到它在比较之前有效地在相等运算符的两侧进行了 RTRIM。看起来您在 LEN 函数上得到了答案,但对于您的问题的相等部分,我真的很想得到一个比“varchars 和相等性在 TSQ 中很棘手”更彻底的答案。
-
Oracle 也这样做,我相信。
-
总的来说,我发现存储空字符串是个坏主意,这也是原因之一。我更喜欢使用 Null 并且当人们试图将 null 信息变成像空字符串这样的值或超出正常范围的数据时会发现很多问题。
标签: sql-server sql-server-2008 tsql string-length datalength