我在SQL Server 2008表中有25列,而且我只需要选择非空的单元格。到目前为止,我已尝试Where
条件,如:
Select *
from TableNmae
where ColumnA is not like '% %'
and ColumnB is not like '% %' ,etc...
我还为所有列尝试了Union
和Union All
,但是对于给定条件,它们只返回非空单元格。
答案 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帮助清除空值和空值的更灵活方式......在这里添加它也很好。您可能还希望从表中选择关键字段以允许您标识源行。