如何在SQL查询中仅返回每日16:00的SCHDATE数据
筛选指定时刻的日期数据
现有查询语句
Date1 = '01.01.2024'; Date2 = 'SYS_CURRENTDATE'; SELECT SCHDATE FROM mytable WHERE SCHDATE >= Date1 AND SCHDATE < Date2;
现有查询结果
01.01.2024 00:00:00 01.01.2024 08:00:00 01.01.2024 16:00:00 02.01.2024 00:00:00 02.01.2024 08:00:00 02.01.2024 16:00:00
修改需求
调整查询逻辑,仅返回所有日期中16:00时刻的SCHDATE数据,期望结果如下:
01.01.2024 16:00:00 02.01.2024 16:00:00 03.01.2024 16:00:00 04.01.2024 16:00:00
修改后的查询语句
不同数据库提取时间部分的函数存在差异,以下是几种主流数据库的实现方案:
MySQL/MariaDB
SET @Date1 = '01.01.2024'; SET @Date2 = CURDATE(); SELECT SCHDATE FROM mytable WHERE SCHDATE >= @Date1 AND SCHDATE < @Date2 AND TIME(SCHDATE) = '16:00:00';
Oracle
DEFINE Date1 = '01.01.2024'; DEFINE Date2 = SYSDATE; SELECT SCHDATE FROM mytable WHERE SCHDATE >= TO_DATE(&Date1, 'DD.MM.YYYY') AND SCHDATE < &Date2 AND TO_CHAR(SCHDATE, 'HH24:MI:SS') = '16:00:00';
SQL Server
DECLARE @Date1 DATE = '01.01.2024'; DECLARE @Date2 DATE = GETDATE(); SELECT SCHDATE FROM mytable WHERE SCHDATE >= @Date1 AND SCHDATE < @Date2 AND CAST(SCHDATE AS TIME) = '16:00:00';
逻辑说明
在原有日期范围筛选的基础上,新增对SCHDATE字段时间部分的校验,确保仅保留小时为16、分钟和秒均为00的记录。
内容的提问来源于stack exchange,提问作者Vellat acar
相关产品推荐
相关产品推荐

