sql-server - 选择前 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”。
解决方案
尝试这个,
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))
推荐阅读
- opencl - 如何使用 OPENCL 在多 GPU 环境中唯一标识 GPU?
- javascript - Ajax & Rails 复选框更新问题
- python-2.7 - 为什么写入配置单元表后有二进制类型
- ruby-on-rails - 在 Rails 控制台中重定向脚手架 ID
- excel - 设置单元格 (n) 颜色索引等于单元格 (n - 1) 颜色索引
- node.js - 为什么 Express.js 不设置我的标题?
- javascript - 未在 href 标记上评估 pug 变量
- swift - 队列实现 - 未解析的标识符 swift map() 和 toString
- django - Django 2.1 模型管理器在行动中缺失
- sql - SQL从所有组中获取最小日期