这是我正在尝试做的事情:
select * from table
where in ('completedDate', 'completedBy', 'cancelDate', 'cancelBy') is not null
如果上面的四列不为空,我需要显示记录。我知道我会用几个 where/and 子句来做到这一点,但我会努力学习并使我的新东西更干净。
我想以更清洁的方式做上面的事情吗?
这是我正在尝试做的事情:
select * from table
where in ('completedDate', 'completedBy', 'cancelDate', 'cancelBy') is not null
如果上面的四列不为空,我需要显示记录。我知道我会用几个 where/and 子句来做到这一点,但我会努力学习并使我的新东西更干净。
我想以更清洁的方式做上面的事情吗?
如果我理解正确,我猜你想这样做:
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
检查所有列是否不为空:
select * from table
where completedDate is not null
and completedBy is not null
and cancelDate is not null
and cancelBy is not null
您可以使用COALESCE函数来确定所有列值是否为 NULL。
COALESCE 函数接受 1 个或多个参数并返回第一个非空参数。如果传递给 COALESCE 的至少一个参数不是 NULL,那么它将返回该值,否则如果所有参数都是 NULL,则返回 NULL。
SELECT *
FROM TABLE
WHERE COALESCE(Column1, Column2, Column3, Column4) IS NOT NULL
此外,根据列的数据类型,您可能必须将它们转换为相同的数据类型。例如,我无法在没有强制转换的情况下在 DateTime 列和 CHAR 列上使用 COALECSE 函数。
但是,即使这会更短,我也不会认为它“更干净”。与 WHERE 子句中的多个 AND 相比,我认为它更难阅读和维护。
如果我理解正确,您想返回所有四列都不为空的记录吗?
执行此操作的标准和(在我看来)最易读的方法是:
Select
*
From
YourTable
Where
Column1 IS NOT NULL AND
Column2 IS NOT NULL AND
Column3 IS NOT NULL AND
Column4 IS NOT NULL;
-- Under reasonable assumption on data types:
select *
from [table]
where completedBy+cancelBy+DATENAME(yy,completedDate)+ DATENAME(yy,cancelDate)
is not null