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

SQLServerで月末を見つける方法

    SQL Server 2012以降、EOMONTH() 関数を使用すると、任意の月の最終日を見つけることができます。 2つの引数を受け入れます。 1つは開始日用で、もう1つはその日付に追加する月数を指定するオプションの引数です。

    この記事では、EOMONTH()の方法を示す例を示します。 SQLServerで動作します。

    構文

    まず、構文は次のとおりです。

    EOMONTH ( start_date [, month_to_add ] )

    start_dateの場所 は月の最終日を検索する日付であり、month_to_add 開始日に追加する月数(ある場合)です。

    EOMONTH() 関数は日付の値を返します データ型。

    例1

    これがどのように機能するかを示す基本的な例です:

    SELECT EOMONTH( '2025-01-01' ) AS Result;

    結果:

    +------------+
    | Result     |
    |------------|
    | 2025-01-31 |
    +------------+

    この場合、開始月は1月であるため、結果は1月の最終日が31日であることを示しています。

    例2–月を追加

    2番目の引数を使用して、追加する月数を指定する例を次に示します。この場合、開始日に1か月を追加します:

    SELECT EOMONTH( '2025-01-01', 1 ) AS Result;

    結果:

    +------------+
    | Result     |
    |------------|
    | 2025-02-28 |
    +------------+

    そして、結果は2月の最終日を示しています。これは、開始日に1か月を追加したためです。

    例3–1か月を引く

    負の数を使用して、開始日から1か月以上を引くことができます。このように:

    SELECT EOMONTH( '2025-01-01', -1 ) AS Result;

    結果:

    +------------+
    | Result     |
    |------------|
    | 2024-12-31 |
    +------------+

    例4–システム日付の使用

    現在の日付から月末を取得する例を次に示します。

    SELECT 
        SYSDATETIME() AS 'Current Date',
        EOMONTH( SYSDATETIME() ) AS 'End of Month';

    結果:

    +-----------------------------+----------------+
    | Current Date                | End of Month   |
    |-----------------------------+----------------|
    | 2018-06-04 22:53:32.7694823 | 2018-06-30     |
    +-----------------------------+----------------+

    前述のように、EOMONTH() 関数は日付でその値を返します データ・タイプ。そのため、この例の結果は、開始日と月末の表示方法に不一致があることを示しています。

    この場合、開始日はSYSDATETIME()で生成されます。 関数。その値をdatetime2(7)として返します。 データ・タイプ。このデータ型には、時間コンポーネントと日付が含まれます。 日付 データ型には日付コンポーネントのみが含まれます。

    FORMAT()を使用していつでも日付をフォーマットできます 関数、または他のさまざまなTSQL関数を使用して、日付のさまざまな部分を抽出します。

    例5–月末までのカウントダウン

    EOMONTH()を組み合わせることもできます 他の機能と連携して、目的の結果を達成します。

    月末までの日数、時間、分、秒を返す例を次に示します。

    SELECT 
        FORMAT(SYSDATETIME(), 'dd MMMM') AS 'Current Date',
        FORMAT(EOMONTH( SYSDATETIME() ), 'dd MMMM') AS 'EOM',
        DATEDIFF(day, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Days',
        DATEDIFF(hour, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Hours',
        DATEDIFF(minute, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Minutes',
        DATEDIFF(second, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Seconds';

    結果:

    +----------------+---------+--------+---------+-----------+-----------+
    | Current Date   | EOM     | Days   | Hours   | Minutes   | Seconds   |
    |----------------+---------+--------+---------+-----------+-----------|
    | 04 June        | 30 June | 26     | 601     | 36055     | 2163252   |
    +----------------+---------+--------+---------+-----------+-----------+

    1. Oracleでキャッシュされたすべてのアイテムをクリアする方法

    2. オラクルで一重引用符を予測してエスケープする方法'

    3. MySQLトリガーは、トリガーが割り当てられている同じテーブルの行を更新できません。推奨される回避策は?

    4. PostgreSQL用のジョブスケジューリングツールの概要