を比較するには、2つの変数だけの時間を取得し、日付は各行の文字列に変換されます。 2つの時間部分を効率的に比較するには、
declare @first datetime
set @first = '2009-04-30 19:47:16.123'
declare @second datetime
set @second = '2009-04-10 19:47:16.123'
select (cast(@first as float) - floor(cast(@first as float))) -
(cast(@second as float) - floor(cast(@second as float)))
as Difference
説明:SQLサーバーの日付は浮動小数点数として格納されます。小数点の前の桁は日付を表します。小数点以下の桁は時間を表します。だからここ
は、例えば日付です:
declare @mydate datetime
set @mydate = '2009-04-30 19:47:16.123'
だがfloatに変換してみましょう:
declare @myfloat float
set @myfloat = cast(@mydate as float)
select @myfloat
-- Shows 39931,8244921682
は今の時間、つまり、数字の後に参加しています:
set @myfloat = @myfloat - floor(@myfloat)
select @myfloat
-- Shows 0,824492168212601
日時に変換する:
declare @mytime datetime
set @mytime = convert(datetime,@myfloat)
select @mytime
-- Shows 1900-01-01 19:47:16.123
1900-01-01はちょうど "ゼロ"の日付です。あなただけの時間であるフォーマット例108のために指定して、変換して、時間の部分を表示することができます。日時とフロートの間
select convert(varchar(32),@mytime,108)
-- Shows 19:47:16
変換を彼らは基本的に同じ方法で保存されているので、かなり速いです。
私は時間が他のものよりも大きい場合は、私が比較できるようにVARCHARに変換しなければならないのはなぜ?私はこの方法で文字列と文字列を比較しませんか? – AndreMiranda
DateDiff関数はdatetimeフィールドを入力として受け入れます。 – Eric