3

mssqldbにいくつかの間隔を保存する必要があります。日時の精度は約です。3.3ms(0、3、および7でのみ終了できます)。しかし、日時間の間隔を計算すると、結果は0、3、および6でしか終了できないことがわかります。したがって、合計する間隔が多いほど、精度が低下します。ミリ秒単位で正確なDATEDIFFを取得することは可能ですか?

declare @StartDate datetime
declare @EndDate datetime

set @StartDate='2010-04-01 12:00:00.000'
set @EndDate='2010-04-01 12:00:00.007'

SELECT DATEDIFF(millisecond, @StartDate, @EndDate),@EndDate-@StartDate, @StartDate, @EndDate

6つではなく7つの広告を見たいです(そして、できるだけ速くする必要があります)

** アップデート **

DATEDIFF値が0、3、6だけでなく、4、7(他にもある可能性があります)で終わることがわかりますが、それでも不正確です。アレックスによって提案された解決策は機能しています。次のコマンドで正しい日時形式を覚えたくない場合は、同じことが達成できます。

SELECT DATEDIFF(SECOND, @StartDate, @EndDate)*1000 + DATEPART(MILLISECOND , @EndDate) - DATEPART(MILLISECOND , @StartDate)

なぜDATEDIFF(millisecond, @StartDate, @EndDate)不正確なのか、まだ疑問に思います。

4

5 に答える 5

2

DATEPARTMSの差( sを引くと正確)を計算して、MSDATEDIFFを除いた差に加算するのはどうですか?

SELECT DATEDIFF(MILLISECOND, CONVERT(VARCHAR, @StartDate, 120), CONVERT(VARCHAR, @EndDate, 120)) + DATEPART(MILLISECOND , @endDate) - DATEPART(MILLISECOND , @StartDate)

.003->。007の場合は4、.000->。007の場合は7になります

于 2010-04-27T09:56:05.053 に答える
0

ここでの問題は、日時データ型に対して精度要件が多すぎることだと思います。

6ミリ秒または7ミリ秒への丸めが問題になる場合は、必要な精度が得られません。

あなたが持っている間隔は連続していますか?もしそうなら、単一の日付を保存してから、最初の開始日と最後の終了日の間のミリ秒を計算できますか?

または、クライアント言語を使用して間隔を取得できますか?次に、間隔をint / longとして保存しますか?開始日と終了日をSQLに保存するのではなく、コードで計算された開始日と間隔をミリ秒単位で保存することもできます。

于 2010-04-27T08:26:09.477 に答える
0

使用するのはどうですかDatePart

declare @StartDate datetime
declare @EndDate datetime

set @StartDate='2010-04-01 12:00:00.000'
set @EndDate='2010-04-01 12:00:00.007'

SELECT DATEDIFF(millisecond, @StartDate, @EndDate),
        DatePart(millisecond, @EndDate-@StartDate),
        @StartDate, @EndDate
于 2010-04-27T08:16:25.107 に答える
0

このようにしてみてください

   SELECT DATEDIFF(millisecond, @StartDate, dateadd(day,1,@EndDate)),dateadd(day,1,@EndDate)-@StartDate, @StartDate, @EndDate
于 2010-04-27T08:20:19.113 に答える
0

または、より正確なDATETIME2日付型を使用することもできます。

declare @StartDate datetime2
declare @EndDate datetime2

set @StartDate='2010-04-01 12:00:00.000'
set @EndDate='2010-04-01 12:00:00.007'

SELECT DATEDIFF(millisecond, @StartDate, @EndDate)

結果として7を選択します。

SQLServerのDateTime2とDateTimeを比較してください

于 2014-05-13T09:57:49.823 に答える