2017-02-07 15 views
1

これは起こるはずですか?または私の質問に何か間違っています。私は11時55分00秒AM [仕上げ]でこれを実行すると、私は次のクエリ正午以降にCast(GetDate()as int)が正しく出力されない

select getdate() as [Date], CAST(getdate() as date) as [Time], CAST(getdate() as INT) as INT, Cast(CAST(cast(getdate() as int) as DATETime) as Date) as finish

を実行した場合、正しい日付を返します 。
12:10:00 PMにクエリを実行すると[終了]は明日の日付を返します。
私はこれを検索しようとしましたが、何かを見つけることができませんでした。
私は日付でグループ化しようとしていますが、私もグループ化したくないので、私は変換を行っています。
は、私はあなたの問題はあなたがint代わりのfloatを使用していて、上の丸めなっていること(あなたは絶対にこれらの変換を行う必要があれば、私はそれはずっと前に必要とされるように使用さ知っている)ということだと思うのMicrosoft SQL Server 2008 R2

+2

は 'INT'にそれを変換しないでください - それは無意味です。 'CONVERT(DATE、GETDATE()) 'を使用する – Siyual

+1

datetimeからintへの変換が退屈であることに同意します。これはデータベースがすでに設定されていた方法です。私は時間を考える方法は12:00:01 AMは1日の始まりで、11:59:59 PMは今日の終わりだと思う。 – Neal

+0

@Luaan '12:10:00 AMは夜中です。 '12:10:00 PM'は正午の直後です。キャストのリテラルとして '12:10:00 'を使用すると、時刻の値に変換すると、正午より10分遅れて取得されます。 – iamdave

答えて

1

を実行しますあなたの換算値:

select getdate() as [Date] 
    ,CAST(getdate() as date) as [Time] 
    ,CAST(getdate() as INT) as INT 
    ,Cast(CAST(cast(getdate() as int) as DATETime) as Date) as finishInt 
    ,CAST(getdate() as float) as FLOAT 
    ,Cast(CAST(cast(getdate() as float) as DATETime) as Date) as finishFloat 

出力:

+-------------------------+------------+-------+------------+------------------+-------------+ 
|   Date   | Time | INT | finishInt |  FLOAT  | finishFloat | 
+-------------------------+------------+-------+------------+------------------+-------------+ 
| 2017-02-07 16:47:59.823 | 2017-02-07 | 42772 | 2017-02-08 | 42771.6999979552 | 2017-02-07 | 
+-------------------------+------------+-------+------------+------------------+-------------+ 
+0

ありがとう、これは本当に何が起こっていたかを理解するのに役立ちました! – Neal

関連する問題