sql >> データベース >  >> RDS >> Sqlserver

今年の最初と最後の日付を取得するにはどうすればよいですか?

    SELECT
       DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
       DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear
    

    上記のクエリは、12月31日の初めの深夜の日時値を示します。これは、1年の最後の瞬間よりも約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
    

    その他の期間

    このアプローチには2つの優れた側面があります。パフォーマンスが優れていることと、yyの両方のオカレンスを置き換えることで他の期間に簡単に変更できることです。 (=年)別の文字列:

    yy, yyyy    year
    qq, q       quarter
    mm, m       month
    wk, ww      week 
    

    (週に注意してください。開始日はサーバーの設定によって異なります。)

    技術の詳細

    これは、1900年からの年数をDATEDIFF(yy, 0, GETDATE())で計算することで機能します。 次に、それをゼロの日付=1900年1月1日に追加します。これは、GETDATE()を置き換えることにより、任意の日付で機能するように変更できます。 DATEDIFF(...)を置き換えることによる部分または任意の年 「Year-1900」で機能します。

     SELECT
       DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
       DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015
    


    1. VBNetを使用してSQLServerにデータを挿入するにはどうすればよいですか

    2. Access2016でテーブルからレポートを作成する方法

    3. Mysql列を行に変換(ピボットテーブル)

    4. ユニットテストの使用が高品質アーキテクチャへの大きな投資である理由