2011-07-21 35 views
10

DateTimeフィールドが前月の開始から終了の間であることを指定するwhereステートメントを実行しようとしています。DateTimeを時刻付きで取得する23:59:59

これを行うには、前月の最初の日に00:00:00の時間があり、前月の最後の日が23:59:59の時間であることを指定する必要があります。この第2の条件は私に頭痛を与えている

..

誰かが私を助けることはできますか?

乾杯

MSSQL 2008

+0

月を比較する必要がある場合は、datetimeから月を 'month()'で抽出するのはなぜですか? –

答えて

11

試してみてください。

SELECT DATEADD(ms, -3, '2011-07-20') 

これは、今日の最後の午後11時59分59秒になるだろう。

なぜ3ミリ秒ですか?これは、Microsoft SQL ServerのDATETIME列に最大で3ミリ秒の解像度(変更されないもの)があるためです。だから私たちがやっていることは3ミリ秒を引くことです

+3

実際にあなたに '23:59:59.997'が届きます – gbn

6

また、同等のない '<' 未満を使用することができます。あなたが23:59:59を必要としないように。

例: DateCreated < '20111201午前〇時00分00秒'

+3

+1これはあなたのやり方です。あなたが23:59:59に行くだけなら、23:59:59.000と23:59:59.999の間の秒を見過ごすでしょう。ミリ秒を指定した場合でも、<=ではなく<を使用すると、それはちょうどきれいです。 –

+0

@Joel Coehoornしかし、00:00:00以外の日付が指定されている場合は、最初に切り捨ててから1日を追加する必要があります。その後、3ミリ秒を引くよりもきれいに見えません。 <=さらに、それはあなたに<を使用させることを強要します。そして、私の意見では、間はずっときれいで、包括的なので、最後のミリ秒を使わなければならないでしょう。 –

3

私はこれらの2つの方法のうちの1つを使ってDATETIMEフィールドで比較を行います EX:ある日のユーザーログを取得するすなわち、今日の日付までの午前12時00分00秒AMで今日の日付からではなく、午前12時00分00秒PM

DECLARE @FromDate datetime 
DECLARE @ToDate datetime 

SET @FromDate = GETDATE() 
SET @ToDate = GETDATE() 
Print '------------------------ ' 
PRINT @FromDate 
PRINT @ToDate 
SET @FromDate = CONVERT(DATETIME, CONVERT(varchar(11),@FromDate, 111) + ' 00:00:00', 111) 
SET @ToDate = CONVERT(DATETIME, CONVERT(varchar(11),@ToDate, 111) + ' 23:59:59', 111) 
Print '------------------------ ' 
PRINT @FromDate 
PRINT @ToDate 



DECLARE @TEST_FROM DATETIME 
SET @TEST_FROM = dateadd(month,((YEAR(@FromDate)-1900)*12)+MONTH(@FromDate)-1,DAY(@FromDate)-1) + ' 12:00:00' 

DECLARE @TEST_TO DATETIME 
SET @TEST_TO = dateadd(month,((YEAR(@ToDate)-1900)*12)+MONTH(@ToDate)-1,DAY(@ToDate)-1) + ' 23:59:59' 

Print '------------------------ ' 
PRINT @TEST_FROM 
PRINT @TEST_TO 

でこれは

------------------------ 
Dec 28 2011 3:18PM 
Dec 28 2011 3:18PM 
------------------------ 
Dec 28 2011 12:00AM 
Dec 28 2011 11:59PM 
------------------------ 
Dec 28 2011 12:00PM 
Dec 28 2011 11:59PM 

参照SQLクエリエディタ画面で、次の印刷されます の私の経験からです変換し、他の方法はhttp://weblogs.sqlteam.com/jeffs/archive/2007/01/02/56079.aspx

0

を得るためにdatetimeデータ型を使用するため、このクエリを試してみてください:)楽しいし、このリンクからである

2018年1月29日23:59:59.997

select dateadd(ms, -3, (dateadd(day, +1, convert(varchar, GETDATE(), 101)))) 
関連する問題