2017-02-07 36 views
1

那麼這是否應該發生?或者我的查詢有問題。 如果我運行下面的查詢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

如果我運行這個在上午十一點55分00秒[完成]返回正確的日期。
如果我在12:10:00 PM執行查詢[完成]返回明日期。
我試圖尋找這個,並找不到任何如此遺憾,如果它之前指出。
我想按日期分組,但我不想按時間分組,這就是爲什麼我正在進行轉換。
運行Microsoft SQL Server 2008 R2

+2

不要將其轉換爲'INT' - 這是荒謬的。使用'CONVERT(DATE,GETDATE())' – Siyual

+1

我同意從datetime轉換爲int,然後返回到日期很乏味,這是數據庫已經安裝的方式。我想我認爲時間的方式是12:00:01 AM是一天的開始,而11:59:59 PM是一天的結束。 – Neal

+0

@Luaan'12:10:00 AM'在半夜。 '12:10:00 PM'就在中午之後。在劇組中使用'12:10:00'作爲文字/轉換爲時間值可以讓你在正午十分鐘的時間內完成任務。 – iamdave

回答

1

我覺得你的問題是,你正在使用int,而不是float並獲得四舍五入上(如果你非得做這些信徒,我知道它曾經不久前被要求)轉換後的值:

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