2014-12-04 75 views
-1

如果您在SQL Server 2014中運行以下查詢,那麼對於列DT的結果,您會得到什麼結果?它應該是「1」,但在SQL Server 2008中,我變成了「0」。確認SQL Server的錯誤?

SELECT 
    CASE WHEN CAST('2014-01-02 00:00:00.001' AS DATETIME) > CAST('2014-01-02 00:00:00.000' AS DATETIME) THEN 1 ELSE 0 END AS 'DT' 
    , CASE WHEN CAST('2014-01-02 00:00:00.002' AS DATETIME) > CAST('2014-01-02 00:00:00.000' AS DATETIME) THEN 1 ELSE 0 END AS 'DT2' 
    , CASE WHEN '2014-01-02 00:00:00.001' > '2014-01-02 00:00:00.000' THEN 1 ELSE 0 END AS 'VARCHAR' 
+1

datetime的分辨率是3.33毫秒 – 2014-12-04 01:47:13

+1

您可以簡化您的查詢,因爲後兩種情況與您的問題無關。 – Raptor 2014-12-04 01:47:31

+1

帶回家的形式是,不要自動假設它是SQL Server中的一個錯誤.... – 2014-12-04 02:12:40

回答

4

日期時間字段的解決方案是3位小數。只精確到內3.33毫秒

SQL服務器同時考慮'2014-01-02 00:00:00.001''2014-01-02 00:00:00.000'作爲2014-01-02 00:00:00.000

SELECT Cast('2014-01-02 00:00:00.001' AS DATETIME), 
     Cast('2014-01-02 00:00:00.000' AS DATETIME) 

兩個日期的結果相同。

在您的病例聲明CAST('2014-01-02 00:00:00.001' AS DATETIME) > CAST('2014-01-02 00:00:00.000' AS DATETIME)失敗,因爲兩者都是平等的,所以其他部分0工作。

+0

@MitchWheat是否足以讓某人理解? – 2014-12-04 02:16:33

+0

不是我downvote BTW – 2014-12-04 03:52:04

+0

@MitchWheat - 沒有問題。我知道它不是你的DV – 2014-12-04 04:16:58