我有一个表在SQL Server 2005数据库中说T,它有两列,比如A和B,它们通常不会有任何值。 如何检查A和B是否为空(所有长度为零的字符串)?
我有这种天真的方式 -
select count(*) as A_count from T where A <> ''
假设A具有数据类型varchar。
我想知道是否可以使用系统表获取相同的信息,如果是这样会比这个查询更快?
欢呼声
答案 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; ''
否则你不会计算空值。