首页 > 解决方案 > 结束可以为空的日期之间的 SQL

问题描述

我正在处理一个 SQL 语句,我正在查看开始日期和结束日期在范围之间。我遇到的一个问题是它的结尾没有更新并且为空。我正在尝试将当前日期添加到示例中的该字段中

如果我这样做,我应该会看到最后两行,此时我看不到任何行。

(CAST(StartDate AS Date) >= '2019-08-22') AND ((CAST(EndDate AS Date) <= '2019-08-22') or (EndDate IS NULL))

表数据

    StartDate               EndDate
    2017-07-18 14:40:00.000 2017-10-13 16:29:09.723
    2017-10-13 16:29:09.723 2017-10-27 10:36:55.990
    2017-10-27 10:36:55.990 2017-12-12 15:01:51.600
    2017-12-12 15:01:51.600 2018-01-24 15:08:53.637
    2018-01-24 15:08:53.637 2018-04-04 10:56:27.110
    2018-04-04 10:56:27.110 2018-05-25 14:14:13.863
    2018-05-25 14:14:13.863 2018-05-25 14:41:16.033
    2018-05-25 14:41:16.033 2018-10-17 15:45:58.517
    2018-10-17 15:45:58.517 2018-12-18 11:33:37.663
    2018-12-18 11:33:37.663 2019-02-11 11:22:52.053
    2019-02-11 11:22:52.053 2019-08-21 10:40:17.937
    2019-08-21 10:40:17.937 2019-08-21 10:40:25.343
    2019-08-21 10:40:25.343 NULL

标签: sqlsql-server

解决方案


如果您确实想使用 BETWEEN,请尝试在 CAST 中执行 ISNULL 或 COALESCE。
假设 EndDate 是一个日期时间字段。

 AND '2019-08-22' BETWEEN CAST(Version.StartDate AS DATE) AND CAST(COALESCE(Version.EndDate, GETDATE()) AS DATE)

推荐阅读