SQL Server日期范围,每月或每季度

时间:2014-02-16 16:46:03

标签: sql sql-server date

我在SQL Server表中有一个日期列表,需要找出一些关于它们的单独主题:

首先,每月或每季度的日期是?日期总是从这个月的第一天开始。

E.g。一个序列可能是01/01/13, 01/02/13, 01/03/13, 01/04/13, 01/05/13因此每月(英国)

E.g。另一个序列可能是01/12/12, 01/03/13, 01/06/13, 01/09/13, 01/12/13因此每季度(英国)

其次,可能由第一个解决的是所有日期?例如没有差距。我解决这个问题的一种方法是说它是月度/季度或者不知道,但那是在C#中。

由于

1 个答案:

答案 0 :(得分:0)

您可以使用DATEDIFF()函数比较两个日期,您可以使用自联接和ROW_NUMBER()函数来比较不同行的日期:

;WITH cte AS (SELECT *, ROW_NUMBER() OVER (ORDER BY dt) RN
              FROM Table1)
SELECT DATEDIFF(day,a.dt,b.dt)
FROM cte a
JOIN cte b
 ON a.RN = b.RN-1

如果您使用的是SQL 2012,则可以使用LEAD()函数比较不同行的值:

SELECT  DATEDIFF(day,dt,LEAD(dt,1) OVER(ORDER BY dt)) AS Days
       ,DATEDIFF(quarter,dt,LEAD(dt,1) OVER(ORDER BY dt)) AS Quarters
FROM Table2

演示:SQL Fiddle