以下は、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
として宣言しました。 。