sql >> データベース >  >> RDS >> Sqlserver

SQL Serverで時間を比較するにはどうすればよいですか?

    比較は機能しますが、日付が各行の文字列に変換されるため、処理が遅くなります。 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'
    

    フロートに変換してみましょう:

    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
    

    日時とフロートの間の変換は、基本的に同じ方法で保存されるため、非常に高速です。



    1. Microsoft OLE DB非推奨!ロングライブADO!

    2. デジタルトランスフォーメーション:すべてはデータ思考から始まります

    3. SELECTステートメントでto_date例外を処理して、それらの行を無視するにはどうすればよいですか?

    4. SQL Serverで日付+時刻から日付を取得する最も効率的な方法は?