如何構造一個總是返回上一年的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日分別..
如何構造一個總是返回上一年的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日分別..
你可以只添加一個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
這似乎是一個奇怪的要求。這樣做的一種方式是通過構建日期字符串和解析它們:
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
我,作爲一個人,只是更喜歡具有連字符。
這應該爲你工作:
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
在當前日期。它根據當前日期返回當前會計年度的開始日期和結束日期。
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
),
您也可以創建此視圖以在需要時引用該視圖。
謝謝。我試圖使用另一個DATEADD函數,但無法弄清楚如何使用它。這工作完美。 – FrozenYeti