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

SQLServerで月の最初の日を取得する3つの方法

    以下は、T-SQLを使用してSQLServerで月の最初の日を返すための3つのオプションです。

    これは、当月の初日、または特定の日付に基づく月の初日である可能性があります。

    オプション1

    これを行う1つの方法は、次のようになります。

    DECLARE @date date;
    SET @date = '2035-10-15';
    SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date);

    結果:

    2035-10-01

    これには、いくつかのT-SQL関数を使用して日付シフトを実行し、日付を月の初めに戻すことが含まれます。

    DATEADD()の詳細については およびDAY() 関数については、DATEADD()を参照してください。 SQLServerとDAY()の例 SQLServerの例。

    オプション2

    月の最初の日を取得するための別のオプションは次のとおりです。

    DECLARE @date date;
    SET @date = '2035-10-15';
    SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0);

    結果:

    2035-10-01 00:00:00.000

    ここでは、DATEDIFF()を組み込みました 計算に関数を組み込みます。

    初期変数をdateとして宣言しましたが 値の場合、結果はdatetime 価値。 CONVERT()を使用できます またはCAST() 結果をdateに変換します 値:

    DECLARE @date date;
    SET @date = '2035-10-15';
    SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @date), 0) AS date);

    結果:

    2035-10-01

    オプション3

    別のオプションは次のとおりです:

    DECLARE @date datetime;
    SET @date = '2035-10-15';
    SELECT @date - DAY( @date ) + 1;

    結果:

    2035-10-01 00:00:00.000

    オプション2と同様に、結果はdatetimeになります。 値ですが、今回は変数をdatetimeとして宣言したためです。 価値。ただし、dateに変換するのと同じ処理を行うことができます 値:

    DECLARE @date datetime;
    SET @date = '2035-10-15';
    SELECT CAST(@date - DAY( @date ) + 1 AS date);

    結果:

    2035-10-01

    変数をdateとして宣言しなかった理由 値は、エラーが発生するためです:

    DECLARE @date date;
    SET @date = '2035-10-15';
    SELECT @date - DAY( @date ) + 1;

    結果:

    Msg 206, Level 16, State 2, Line 3
    Operand type clash: date is incompatible with int

    これは、dateに整数を追加しようとしているためです。 値、これは機能しません。ただし、datetimeに整数を追加します 値は機能します。そのため、変数をdatetimeとして宣言しました。 。


    1. FORJSONPATHを使用してネストされたJSON配列を作成します

    2. 異なる日付形式でCSVをMySQLにインポートする

    3. AndroidStudioアセットのsqliteをコピーしても機能しません

    4. OracleのNUMTODSINTERVAL()関数