web-dev-qa-db-ja.com

SQLで現在の年を取得する

レポートのために取得しようとしているデータがあり、年初来のレポートを作成しています。テーブルの列が日時としてフォーマットされています。 selectステートメントを実行して、date =今年のすべての結果を取得しようとしています。

例えば:

SELECT  A.[id], A.[classXML]
FROM   tuitionSubmissions as A
WHERE A.[status] = 'Approved' AND A.[reimbursementDate] = THISYEAR
FOR    XML PATH ('data'), TYPE, ELEMENTS, ROOT ('root');

これを達成する簡単な方法はありますか?

16
SBB

はい、実際には非常に簡単です。

WHERE YEAR(A.[reimbursementDate]) = YEAR(GETDATE())
17

パフォーマンスが問題になる場合は、これがより良い方法になるはずです(ただし、それほど読みやすくはありません)。

where A.[reimbursementDate] between  
     DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) and
     DATEADD(MILLISECOND, -3, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0))

これらのファンキーなDATEADDステートメントは、現在の年の最初と最後の日(12月31日23:59:59.997まで)を返します。 reimbursementDateは関数に含まれていないため、クエリは該当するインデックスを利用できます。

2
Jerrad