3

GETDATE() に基づいて、常に前年の 7 月 1 日の開始日と今年の 6 月 30 日の終了日を返す 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 日を返します。

4

4 に答える 4

4

現在のスクリプトに別の 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
于 2013-07-01T17:23:55.193 に答える
2

これは奇妙な要求のようです。これを行う 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 の日付設定で正しく解釈される形式の文字列が作成されます。

ハイフンを省略しても常に機能すると私は信じています (Aaron Bertrand が書いたことを思い出してください)。

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

私は、人間として、ハイフンを使用することを非常に好みます。

于 2013-07-01T17:21:06.080 に答える
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
于 2013-07-01T17:25:47.617 に答える