レポートのために取得しようとしているデータがあり、年初来のレポートを作成しています。テーブルの列が日時としてフォーマットされています。 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');
これを達成する簡単な方法はありますか?
はい、実際には非常に簡単です。
WHERE YEAR(A.[reimbursementDate]) = YEAR(GETDATE())
パフォーマンスが問題になる場合は、これがより良い方法になるはずです(ただし、それほど読みやすくはありません)。
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
は関数に含まれていないため、クエリは該当するインデックスを利用できます。