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