【问题标题】:why should I use Len(columnName) instead of columnName='' (sql server 2008)为什么我应该使用 Len(column Name) 而不是 column Name='' (sql server 2008)
【发布时间】:2011-09-11 05:00:09
【问题描述】:

只是想知道 我同事对我说不要使用columnName='',而是使用Len(columnName)==0

当我查询某些内容并且我想要表中值为 null 或空的所有列时发生这种情况。

对空字符串使用 len i/o 测试有什么好处吗?我什么都看不到。

谢谢

【问题讨论】:

  • 通常您不希望在函数调用中包装列,因为这是不可分割的,并且意味着索引和列统计信息都不能使用。 Is it faster to check if length = 0 than to compare it to an empty string? 的可能重复项
  • @Martin Smith Len could 似乎是 sargable 但是......如果选择它作为这样的优化来实现(所有字符串长度相同在索引中是连续的),因此它可以转换为(意图等效的)name > "AAA" and name < "ZZZ"。我不知道是否应用了这样的优化,或者索引(如果有的话)对实际性能的影响是什么,只是一种思考。
  • @pst 所有相同长度的字符串在一个索引中不连续,它们按照排序规则按字典顺序排列?
  • @Martin Smith Doh。你完全正确。我不太确定我在想什么......

标签: sql-server tsql sql-server-2008


【解决方案1】:

如果你想要值为空字符串或 null 的行,你应该这样做。

where Col = '' or Col is null

使用len(Col) 不会为您提供具有null 值的行。

【讨论】:

  • 有趣。不知道不会给出空值的行
  • 我刚刚看到这篇文章并想注意,NULL 不是值。 NULL 只是缺失或不适用值的标记。但是空字符串 '' 是一个值。这就是区别。因此,当列允许 NULL 时,请确保您在 TSQL 中处理这些
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
相关资源
最近更新 更多