2012-07-17 77 views
3

當我運行在SQL-Server 2008中的代碼,'2012/6/1'<'2012年6月1日0:00:00.000'= true?

select case when '6/1/2012' < '6/1/2012' then 1 else 0 end 

我得到0

如果我跑,

select case when '6/1/2012 0:00:00.000' < '6/1/2012' then 1 else 0 end 

我也得到0

但是,如果我運行

select case when '6/1/2012' < '6/1/2012 0:00:00.000' then 1 else 0 end 

我得到1.

這是爲什麼?

回答

12

我的猜測是:

  1. 你比較兩個字符串(沒有在你的查詢表明,他們都應該是相比日期)。
  2. 如果兩個字符串相同(除了一個字符中包含多餘字符),則較長的字符串爲「較大」。

你可能會期待您的數據庫自動檢測日期,但會涉及解析字符串你給它的情況下,它是一個日期,這會影響性能,並且也可混淆(如果有些東西被轉換爲一個日期,你不是這個意思)。

6

您必須將它們轉換爲datetime以將它們作爲datetime的值進行比較。返回0

select case when cast('6/1/2012' as datetime) < cast('6/1/2012 0:00:00.000' as datetime) then 1 else 0 end 
相關問題