加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 数据库 > MsSql > 正文

sql – 如何选择两个日期之间的所有小时数?

发布时间:2020-05-24 09:59:25 所属栏目:MsSql 来源:互联网
导读:declare @minDateTime as datetime;declare @maxDateTime as datetime;set @minDateTime = 2014-01-13 02:00:00;set @maxDateTime = 2014-12-31 14:00:00; 我想创建一个select语句,它将在@minDateTime和@maxDateTime之间每小

declare @minDateTime as datetime;
declare @maxDateTime as datetime;

set @minDateTime = '2014-01-13 02:00:00';
set @maxDateTime = '2014-12-31 14:00:00';

我想创建一个select语句,它将在@minDateTime和@maxDateTime之间每小时返回一次(没有可供选择的表.我不是在寻找where子句!):

2014-01-13 02:00:00
2014-01-13 03:00:00
2014-01-13 04:00:00
...
2014-12-31 12:00:00
2014-12-31 13:00:00
2014-12-31 14:00:00

解决方法

试试这个.使用递归CTE.
DECLARE @minDateTime AS DATETIME;
DECLARE @maxDateTime AS DATETIME;

SET @minDateTime = '2014-01-13 02:00:00';
SET @maxDateTime = '2014-12-31 14:00:00';

;
WITH Dates_CTE
     AS (SELECT @minDateTime AS Dates
         UNION ALL
         SELECT Dateadd(hh,1,Dates)
         FROM   Dates_CTE
         WHERE  Dates < @maxDateTime)
SELECT *
FROM   Dates_CTE
OPTION (MAXRECURSION 0)

在上面的查询中,Dates_CTE是一个公共表达式表,CTE的基本记录是由UNION ALL之前的第一个sql查询派生的.查询结果为您提供最短日期.

重复执行UNION ALL后的第二次查询以获得结果.此过程是递归的,并将持续到Dates小于@maxDateTime.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读