sql - SQL空日期比较
问题描述
我在员工数据库上提供了两个查询(我们检查它们是否相等),我需要显示我们是否需要使用 IS NULL 值来确定我们的表是否会给出正确的结果。我们有工资表的三个属性,即to_date和from_date和emp_no,如果工资行仍然有效,则 to_date 将具有 NULL(即,emp_no 的工资仍然是最新的,因此to_date为NULL)。这些是正在比较的查询:
SELECT COUNT(*)
FROM salaries
WHERE from_date <= '1996-12-31' AND to_date >= '1996-12-01';
和
SELECT COUNT(*)
FROM salaries
WHERE from_date <= '1996-12-31' AND (to_date >= '1996-12-01' OR to_date IS NULL) ;
目标是找出在 12 月份领到薪水的员工人数,领取薪水的唯一条件是该员工在 12 月份至少有一天的薪水。
解决方案
您正在寻找在 1996 年 12 月至少工作了一天的员工。
这看起来是使用日期功能的好地方overlaps()
:
where (from_date, coalesce(to_date, now()))
overlaps ('1996-12-01'::date, interval '1' month)
实际上,当员工的最后一天工作是 12 月 1 日时,上述表达式具有优势(在这种情况下,我认为您想将其计算在内,而这不会)。因此,我们可以只写:
where
from_date < '1997-01-01'::date
and (to_date is null or to_date >= '1996-12-01'::date)
推荐阅读
- jenkins - 詹金斯,vmvare centos6.0
- wpf - 在 WPF 中单击菜单项时如何创建子窗口(C#)
- cron - 石英 Cron 失火
- javascript - 如何重置输入值
- javascript - 按标签搜索 Twitter Api
- python - 在 Linux 的虚拟环境中使用 python 安装包(Bash to Python)
- assembly - 在汇编代码中复制 C 程序
- google-tag-manager - 为什么在常规 GA 事件上使用 GTM/datalayer?
- java - 如何在java中使用标签?
- asp.net-mvc - .Net MVC 在渲染后改变视图