SQL仅选择非空列

时间:2015-04-16 15:36:48

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

我在SQL Server 2008表中有25列,而且我只需要选择非空的单元格。到目前为止,我已尝试Where条件,如:

Select * 
from TableNmae 
where ColumnA is not like '% %' 
  and  ColumnB is not like '% %' ,etc...

我还为所有列尝试了UnionUnion All,但是对于给定条件,它们只返回非空单元格。

5 个答案:

答案 0 :(得分:3)

我会像下面这样写这个,以便使用索引(如果存在):

Select * 
From TableName 
Where ColumnA Is Not NULL And ColumnA <> '' 
  And ColumnB Is Not NULL And ColumnB <> ''
.......

答案 1 :(得分:0)

Select * 
from TableNmae 
where ColumnA is not null
and  ColumnB is not null ...

答案 2 :(得分:0)

Select * 
from TableNmae 
where isnull(ColumnA,'') != ''
   and  isnull(ColumnB, '') != ''

除非它是一个数值数据类型,否则你必须将isnull设置为0或转换/转换为varchar数据类型。

答案 3 :(得分:0)

你可以使用isnull之类的,

来做到这一点

Select * from TableNmae where IsNull(ColumnA, '') <> '' and IsNull(ColumnA, '') <> ''...

这应该解决isnull和空。这将返回没有所有空列的行。 如果您的问题是使用一个select语句仅返回行中的非空列,则无法完成。

答案 4 :(得分:0)

如果您不想基于行,您可以将一系列单独的列评估结合在一起:

SELECT 'ColumnA' AS ColumnName, ColumnA AS ColumnValue
FROM TableName
WHERE NOT ColumnA IS NULL

UNION ALL

SELECT 'ColumnB' AS ColumnName, ColumnB AS ColumnValue
FROM TableName
WHERE NOT ColumnB IS NULL

UNION ALL

-- etc....

其他一些答案也显示了使用IsNull帮助清除空值和空值的更灵活方式......在这里添加它也很好。您可能还希望从表中选择关键字段以允许您标识源行。