2013-07-01 48 views
2

如何構造一個總是返回上一年的7月1日的開始日期和基於GETDATE()的當年6月30日的結束日期的SQL語句?現在我有在SQL中創建動態日期範圍

Dateadd(yy, Datediff(yy,1,GETDATE())-1,0) AS StartDate, 
DateAdd(dd,-1,Dateadd(yy, Datediff(yy,0,GETDATE()),0)) AS EndDate 

將返回2012年1月1 2013年12月31日分別..

回答

3

你可以只添加一個DATEADD(),以當前的腳本:

SELECT DATEADD(month,6,DATEADD(yy, DATEDIFF(yy,1,GETDATE())-1,0)) AS StartDate 
     ,DATEADD(month,6,DATEADD(dd,-1,DATEADD(yy, DATEDIFF(yy,0,GETDATE()),0))) AS EndDate 
+0

謝謝。我試圖使用另一個DATEADD函數,但無法弄清楚如何使用它。這工作完美。 – FrozenYeti

1

這似乎是一個奇怪的要求。這樣做的一種方式是通過構建日期字符串和解析它們:

select cast(cast(year(GETDATE()) - 1 as varchar(255))+'-07-01' as DATE) as StartDate, 
     cast(cast(year(GETDATE()) as varchar(255))+'-06-30' as DATE) as EndDate 

此構造字符串格式'2013-06-30',這將是正確的解釋,對於大多數SQL Server的日期設置。

我相信(回憶的東西阿龍貝特朗寫),離開了連字符總是工作:

select cast(cast(year(GETDATE()) - 1 as varchar(255))+'0701' as DATE) as StartDate, 
     cast(cast(year(GETDATE()) as varchar(255))+'0630' as DATE) as EndDate 

我,作爲一個人,只是更喜歡具有連字符。

0

這應該爲你工作:

SELECT CAST('7/1/' + CAST(DATEPART(yy, Dateadd(yy, Datediff(yy,1,GETDATE())-1,0)) as varchar) as varchar) as startdate, 
CAST('6/30/' + CAST(DATEPART(yy, Dateadd(yy, Datediff(yy,0,GETDATE()),0)) as varchar) as varchar) as enddate 
2
我一直在使用這種CTE基於動態財政年度範圍

在當前日期。它根據當前日期返回當前會計年度的開始日期和結束日期。

WITH FYDates AS (
SELECT 
    CASE 
     WHEN MONTH(GETDATE()) IN (1, 2, 3, 4, 5, 6) 
     THEN CAST(CAST(YEAR(GETDATE()) - 1 AS VARCHAR) + '/07/01' AS DATE) 
     ELSE CAST(CAST(YEAR(GETDATE()) AS VARCHAR) + '/07/01' AS DATE) END AS FYStartDate, 
    CASE 
     WHEN MONTH(GETDATE()) IN (1, 2, 3, 4, 5, 6) 
     THEN CAST(CAST(YEAR(GETDATE()) AS VARCHAR) + '/06/30' AS DATE) 
     ELSE CAST(CAST(YEAR(GETDATE()) + 1 AS VARCHAR) + '/06/30' AS DATE) END AS FYEndDate 
), 

您也可以創建此視圖以在需要時引用該視圖。