首页 > 解决方案 > 选择前 12 小时窗口中的记录

问题描述

我在下面的结构中有表格,

Id      Name      Created_Date
1       AAA       10/20/2019 3:00:00
2       BBB       10/20/2019 15:00:00
3       CCC       10/21/2019 4:00:00
4       DDD       10/21/2019 18:00:00

我需要需要根据当前日期和时间返回的单个查询,例如:

案例1:当前日期为10/21/2019,时间为上午,需要返回上一日期(10/20/2019),下半年(10/20/2019 12:00:01 to 10/20/2019) 23:59:59)。在我们的例子中,需要返回记录“BBB”。

案例2:当前日期为10/21/2019,时间为下午,需要返回当前日期(10/21/2019),上半年(10/21/2019 00:00:01 to 10/21/2019) 11:59:59)。在我们的例子中,需要返回记录“CCC”。

标签: sql-servertsqldatetime

解决方案


尝试这个,

DECLARE @Temp_Table TABLE
(
    Id INT,Name VARCHAR(10),Created_Date DATETIME
)
INSERT INTO @Temp_Table
SELECT 1,'AAA','10/20/2019 3:00:00 ' UNION ALL
SELECT 2,'BBB','10/20/2019 15:00:00' UNION ALL
SELECT 3,'CCC','10/21/2019 4:00:00 ' UNION ALL
SELECT 4,'DDD','10/21/2019 18:00:00' 

DECLARE @DATE_TIME DATETIME='10/21/2019 18:00:00'

SELECT  *
FROM @Temp_Table
WHERE Created_Date BETWEEN IIF(DATEPART(HOUR,@DATE_TIME) >12,CAST(CAST(@DATE_TIME AS DATE) AS DATETIME),DATEADD(HOUR,12,DATEADD(DAY,-1,CAST(CAST(@DATE_TIME AS DATE) AS DATETIME))))
AND IIF(DATEPART(HOUR,@DATE_TIME) >12,DATEADD(HOUR,12,CAST(CAST(@DATE_TIME AS DATE) AS DATETIME)),CAST(CAST(@DATE_TIME AS DATE) AS DATETIME))

推荐阅读