SQLでは、時間区間の検査精度についてクエリーを設定します。
1013 ワード
入力の比較精度:@datepart
(@datepartパラメータ参照:http://msdn.microsoft.com/zh-cn/library/ms174420.aspx)
入力時間範囲:@Start datetime、@End datetime
データベースの時間値:Date
コアステートメント:
開始時間から終了時間までの長さ=開始時間からある時点までの長さ+ある時点までの時間点から終了時間までの長さ。
たとえば:
入力値:{13,16}
比較値:{12,13,15,16,17}
16-13=3
1.
abs(12-13)=1,abs(12-16)=4
1+4=5!=3
2.
abs(13-13)=0,abs(13-16)=3
0+3=3=3=3
3.
abs(15-13)=2,abs(15-16)=1
2+1=3=3
4.
abs(16-13)=3,abs(16-16)=0
3+0=3=3
5
abs(17-13)=4,abs(17-16)=1
4+1=5!=3
(@datepartパラメータ参照:http://msdn.microsoft.com/zh-cn/library/ms174420.aspx)
入力時間範囲:@Start datetime、@End datetime
データベースの時間値:Date
コアステートメント:
datediff(@datepart ,@Start, @End) = abs(datediff (@datepart,Date ,@Start)) + abs(datediff (@datepart, Date,@End)))
例:SELECT 1 WHERE datediff(@datepart ,@Start, @End) = abs(datediff (@datepart,Date ,@Start)) + abs(datediff (@datepart, Date,@End)))
アルゴリズムの原理:開始時間から終了時間までの長さ=開始時間からある時点までの長さ+ある時点までの時間点から終了時間までの長さ。
たとえば:
入力値:{13,16}
比較値:{12,13,15,16,17}
16-13=3
1.
abs(12-13)=1,abs(12-16)=4
1+4=5!=3
2.
abs(13-13)=0,abs(13-16)=3
0+3=3=3=3
3.
abs(15-13)=2,abs(15-16)=1
2+1=3=3
4.
abs(16-13)=3,abs(16-16)=0
3+0=3=3
5
abs(17-13)=4,abs(17-16)=1
4+1=5!=3