给定一个带有 date_time 列的表,如何仅使用日期运行查询

Dar*_*018 0 sql-server date-format datetime where

我有一个带有表的数据库,该表有一列 datetime Date_Time。其格式例如:2021-09-01 13:15:16。我想设置一个独立于时间的查询,但只考虑日期。例如,给定这样的表:

Date_Time
2021-09-01 13:15:16
2021-09-01 10:25:12
2021-08-30 03:05:16
2021-08-29 13:15:16
...
Run Code Online (Sandbox Code Playgroud)

我想运行一个查询,如:

SELECT Date_Time 
FROM dbo.Twitter 
WHERE Date_Time BETWEEN '2021-08-29' AND '2021-09-01' 
ORDER BY Date_Time DESC;
Run Code Online (Sandbox Code Playgroud)

这样的查询当然没有给我任何东西,因为在 BETWEEN 中没有指定小时。

所需的结果必须是您在上面看到的结果,因此所有来自 '2021-08-29 00:00:00' 和 '2021-09-01 23:59:59' 的行我试图将小时数强加给自己 00:00 :00 和 23:59:59 在 BETWEEN 命令中,但由于该时间没有记录,因此不返回任何内容。

无论何时,查询都应返回该日期的所有结果。

Dan*_*man 6

日期范围查询的一​​个好做法是指定包含开始日期和不包含结束日期,如下所示。当范围值是确切日期(午夜)时,这将有效地忽略时间部分。

SELECT Date_Time 
FROM dbo.Twitter 
WHERE Date_Time >= '2021-08-29' AND Date_Time < '2021-09-02' 
ORDER BY Date_Time DESC;
Run Code Online (Sandbox Code Playgroud)

您也可以在结束日期值中添加一天,以便可以更自然地指定日期范围值,就像BETWEEN您的问题中的值一样,包括结束日期的行:

DECLARE
    @StartDate datetime = '2021-08-29',
    @EndDate datetime = '2021-09-01';
SELECT Date_Time 
FROM dbo.Twitter 
WHERE Date_Time >= @StartDate AND Date_Time < DATEADD(day, 1, @EndDate)
ORDER BY Date_Time DESC;
Run Code Online (Sandbox Code Playgroud)