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 命令中,但由于该时间没有记录,因此不返回任何内容。
无论何时,查询都应返回该日期的所有结果。
日期范围查询的一个好做法是指定包含开始日期和不包含结束日期,如下所示。当范围值是确切日期(午夜)时,这将有效地忽略时间部分。
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)