2012-04-23 18 views
2

は、私はタイプDateTime@pstatDateというパラメータを持っています。更新日時フィールドの日付部分

パラメータのdatePartをその月のLastdayに単純に更新する必要があります。例えば

日は、私はそれは私がこれを達成するにはどうすればよいApr 30 2012 2:15PM

にそれを更新する必要があるApr 23 2012 2:15PMある場合。

答えて

3

たぶん、このような何か:

DECLARE @Today DATETIME 
SET @Today=GETDATE() 

SELECT DATEADD(DAY,-DAY(DATEADD(MONTH,MONTH(@Today)+1,@Today)), 
DATEADD(MONTH,1,@Today)) 

ます。また、このようにそれを行うことができます:@Aaronベルトランが言ったように

SELECT @Today+datediff(day, @Today, dateadd(month, 1, @Today))- 
DATEPART(day,@Today) 

を私は使用しては注意が必要だろう この構文はより新しいデータ型で失敗するため、暗黙的な日付の計算(@Today + ...)になります(OPは最終的に SQL Server 2005のオフとDATEまたはDATETIME2、または他の の読者によって誘惑され、既にDATEになどを使用している可能性がある)

だからそれによると、このような何か:

SELECT DATEADD(DD,datediff(day, @Today, dateadd(month, 1, @Today))- 
DATEPART(day,@Today),@Today) 
+0

+1ですが、datepart引数(例: 'm'の代わりに' MONTH')。すべての怠惰な簡略形式は直感的ではなく、コードが簡潔にするよりはるかに優れています。私見では。 –

+0

確かにありがとうございます。それを行う:P – Arion

+0

は '2012-04-31 15:37:00.200'の代わりに' 2012-01-31 15:37:00.200'を返す –

2
DECLARE @pstatDate DATETIME; 
SET @pstatDate = 'Apr 23 2012 2:15PM'; 

SELECT DATEADD(MONTH, 1, DATEADD(DAY, 0-DAY(@pstatDate), @pstatDate)); 

結果:

----------------------- 
2003-04-30 14:15:00.000 
+0

私はもともと元の質問で1、2、4の文章を読みました。 –

+0

変数を宣言して1つのステップで初期化することはできないため、(要求されたとおりに)SQL-Server 2005では機能しません。とにかく+1 –

+0

ありがとうTimさん、修正されました。 OPにはすでに宣言され、初期化された変数があるので、宣言は無関係だと私は思う。 –

関連する問題