首页 > 解决方案 > 用于检查两个日期之间是否不存在日期的 SQL 查询

问题描述

我使用包含几天计划的数据库。

我请求找出可能的错误。

我想要一个检查日期的查询。如果缺少某天(startDate / endDate),我想知道。

例如,如果我在数据库中的列“Day”包含:

01/01/2019
01/02/2019
01/04/2019

是否可以进行如下所示的查询:

SELECT Day FROM Schedule WHERE Day doesn't exist BETWEEN 01/01/2019 AND 01/04/2019 

我希望它在 2019 年 1 月 3 日回到我身边。

标签: sqlsql-server-2012

解决方案


是的,有可能(使用日历表或临时查询来生成它):

WITH cte AS (
  SELECT CAST('20190101' AS DATETIME) t
  UNION ALL
  SELECT t + 1 AS t
  FROM cte
  WHERE t < '20190104'
)
SELECT c.*
FROM cte c
LEFT JOIN Schedule s
  ON c.t = s.[day]
WHERE s.[day] IS NULL;

db<>小提琴演示


推荐阅读