SQL Server 2000を使用して、今年の最初と最後の日付を取得する方法を教えてください。
期待される出力:
01/01/2012
と31/12/2012
SELECT
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear
上記のクエリは、12月31日の初めの真夜中の日時値を示します。これは、年の最後の瞬間から約24時間短いです。 12月31日に発生する可能性のある時間を含める場合は、<
比較を使用して、来年の最初の時間と比較する必要があります。あるいは、今年の最後の数ミリ秒と比較することもできますが、DATETIME以外のもの(DATETIME2など)を使用している場合は、まだギャップが残ります。
SELECT
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS LastDayOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0) AS FirstOfNextYear,
DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0)) AS LastTimeOfYear
技術詳細
これは、1900年以降の年数をDATEDIFF(yy, 0, GETDATE())
で計算し、それをゼロの日付= 1900年1月1日に追加することによって機能します。これは、GETDATE()
部分を置き換えることによって任意の日付に機能するように変更できます。 "Year - 1900"のDATEDIFF(...)
関数
SELECT
DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015
getUTCDate()
を使用して取得した現在の日付から、DATEPART
関数を使用して現在の年を取得できます。
SELECT
'01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())),
'31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))
単に書いてください: -
select convert (date,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0))
その年の開始日。
select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1))
毎年、最初の日として1番目、最後の日として31日があります。年をその日と月に添付するだけです。
SELECT '01/01/'+cast(year(getdate()) as varchar(4)) as [First Day],
'12/31/'+cast(year(getdate()) as varchar(4)) as [Last Day]
年の最初の日と最後の日を取得するには、CONCAT
関数を使用できます。結果の値は任意の型にキャストできます。
CONCAT(YEAR(Getdate()),'-01-01') FirstOfYear,
CONCAT(YEAR(GETDATE()),'-12-31') LastOfYear
これはかなり簡単な方法です。
SELECT DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS 'First Day of Current Year';
SELECT DATEFROMPARTS(YEAR(GETDATE()), 12, 31) AS 'End of Current Year';
セクシーではありませんが、うまくいきます。
今年の開始日の場合:
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
当年度の終了日の場合:
SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))
Microsoft SQL Server(T-SQL)では、これは次のように実行できます。
--beginning of year
select '01/01/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))
--end of year
select '12/31/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))
CURRENT_TIMESTAMP - クエリ実行時のSQLサーバの日付を返します。
YEAR - 現在のタイムスタンプの年の部分を取得します。
STR、LTRIM - これら2つの関数は、これを目的の接頭辞と連結できるvarcharに変換できるように適用されます(この場合はどちらかです。年の最初の日付または年の最後の日付)何らかの理由で、YEAR関数によって生成された結果には、接頭部スペースが付きます。それらを直すには、左トリムであるLTRIM関数を使います。
select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31')
from dual
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
これをチェックしてください。
select convert(varchar(12),(DateAdd(month,(Month(getdate())-1) * -1, DateAdd(Day,(Day(getdate())-1) * -1,getdate()))),103) as StartYear,
convert(varchar(12),DateAdd(month,12 - Month(getdate()), DateAdd(Day,(31 - Day(getdate())),getdate())),103) as EndYear
print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)
別の方法:(SQL Server 2012以降)
SELECT
DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay