以下是我要做的事情:
select * from table
where in ('completedDate', 'completedBy', 'cancelDate', 'cancelBy') is not null
如果上面的四列不是null,我需要显示记录。我知道我会用几个where /和子句来做这个,但是试着学习并让我的新东西更清洁。
我正在尝试以更清洁的方式做到这一点吗?
答案 0 :(得分:6)
如果我理解正确,我想你想这样做:
select *
from table
where completedDate is not null
and completedBy is not null
and cancelDate is not null
and cancelBy is not null
关于代码的清晰度,我没有看到更好的编写方式,这就是我要编写的代码。
编辑:在这种情况下,我不会那样做,但如果这是一个非常常见的情况,您可以在表格中添加计算列(是否存储),或创建视图在桌子上,并做:
select * from view where importantFieldsAreNotNull = 1
答案 1 :(得分:2)
检查所有列是否都为空:
select * from table
where completedDate is not null
and completedBy is not null
and cancelDate is not null
and cancelBy is not null
答案 2 :(得分:2)
如果我理解正确,你想要返回所有四列都不为空的记录吗?
标准和(在我看来)最可读的方式是:
Select
*
From
YourTable
Where
Column1 IS NOT NULL AND
Column2 IS NOT NULL AND
Column3 IS NOT NULL AND
Column4 IS NOT NULL;
答案 3 :(得分:2)
您可以使用COALESCE函数来确定所有列值是否为NULL。
COALESCE函数接受1个或多个参数,并返回第一个非null参数。如果传递给COALESCE的参数中至少有一个是NOT NULL,那么它将返回该值,否则如果所有参数都为NULL,则返回NULL。
SELECT *
FROM TABLE
WHERE COALESCE(Column1, Column2, Column3, Column4) IS NOT NULL
另外,根据列的数据类型,您可能必须将它们CAST为相同的数据类型。例如,我无法在没有强制转换的情况下在DateTime列和CHAR列上使用COALECSE函数。
然而,即使这会更短,我也不会认为它“更清洁”。我认为与WHERE子句中的多个AND相比,读取和维护会更难。
答案 4 :(得分:2)
-- Under reasonable assumption on data types:
select *
from [table]
where completedBy+cancelBy+DATENAME(yy,completedDate)+ DATENAME(yy,cancelDate)
is not null