Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server日期范围,每月或每季度_Sql_Sql Server_Date - Fatal编程技术网

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

SQL Server日期范围,每月或每季度,sql,sql-server,date,Sql,Sql Server,Date,我在SQL Server表中有一个日期列表,需要找出几个单独的主题: 首先,日期是每月还是每季度?日期总是从一个月的第一天开始 例如,一个序列可能是01/01/13、01/02/13、01/03/13、01/04/13、01/05/13,因此每月(英国) 例如,另一个序列可能是01/12/12、01/03/13、01/06/13、01/09/13、01/12/13,因此每季度(英国) 第二,第一个可以解决的问题是,所有的日期都存在吗?没有空隙。我解决这个问题的一种方法是说要么是每月/每季度,要么

我在SQL Server表中有一个日期列表,需要找出几个单独的主题:

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

例如,一个序列可能是
01/01/13、01/02/13、01/03/13、01/04/13、01/05/13
,因此每月(英国)

例如,另一个序列可能是
01/12/12、01/03/13、01/06/13、01/09/13、01/12/13
,因此每季度(英国)

第二,第一个可以解决的问题是,所有的日期都存在吗?没有空隙。我解决这个问题的一种方法是说要么是每月/每季度,要么就是不知道,但那是在C#中


谢谢

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

;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
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 2012,则可以使用
LEAD()
函数比较不同行的值:

;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
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

演示:

我有点明白你的想法。第二排是一个很好的开始,谢谢