有没有更好的方法来确定表中的列是否为空?

时间:2009-05-20 14:08:23

标签: sql-server-2005 tsql

我有一个表在SQL Server 2005数据库中说T,它有两列,比如A和B,它们通常不会有任何值。 如何检查A和B是否为空(所有长度为零的字符串)?

我有这种天真的方式 -

select count(*) as A_count from T where A <> ''

假设A具有数据类型varchar。

我想知道是否可以使用系统表获取相同的信息,如果是这样会比这个查询更快?

欢呼声

3 个答案:

答案 0 :(得分:2)

您的方法基本上是正确的,尽管您的问题中的措辞不准确。 empty是否包含NULL或非零长度的空字符串?

你可以通过以下方式处理这些案件:

select count(*) as A_count from T where isnull(rtrim(ltrim(A)), '') <> ''

另外,请确保A列上有索引。

答案 1 :(得分:0)

如果我们讨论的是零长度字符串,那么这就是我要这样做的方式:

select count(*) as A_count from T where LEN(A) > 0

但是请记住,如果A可以为null,那么这些行将不会被LEN(A)&gt;捕获。 0或LEN(A)= 0,并且在这种情况下你必须在A周围包裹一个ISNULL。

答案 2 :(得分:0)

如果您的列可以为空,则必须按如下方式修改查询:

从T中选择count(*)作为A_count,其中COALESCE(A,'')&lt;&gt; ''

否则你不会计算空值。