2011-05-26 161 views
0

我無法想在我的SQL查詢來比較日期:比較日期在SQL

SELECT restrictions, restrictions_adddate FROM restrictions WHERE id = '555555' 
AND restrictions_adddate BETWEEN ? and ?; 

無論在格式「MM-DD-YYYY」的參數系統打印的。我收到了錯誤的日期格式錯誤,但嘗試了多種方式。任何幫助表示讚賞,如果需要更多信息,請讓我知道。謝謝。

+0

哪些DBMS您使用的? – 2011-05-26 14:18:54

+0

@a_horse_with_no_name,Oracle11g – Dan 2011-05-26 14:22:23

+0

您是否也嘗試格式「yyyy-mm-dd」? – 2011-05-26 14:05:13

回答

1

這應該在任何符合標準的DBMS的工作:

SELECT restrictions, restrictions_adddate 
FROM restrictions 
WHERE id = '555555' 
    AND restrictions_adddate BETWEEN DATE '2011-01-01' and DATE '2011-12-31'; 
+0

@Dems:那是不正確的。格式'DATE'2011-01-01'由ANSI標準定義,以便文字必須採用ISO格式(yyyy-mm-dd)。如果你忽略關鍵字'DATE',那麼你是絕對正確的。 – 2011-05-26 14:31:00

+0

@a_horse_with_no_name:其實*它是* true。在英式英語模式下,SQL Server會將此格式解釋爲'yyyy-dd-mm',除非您添加時間部分,例如「2012-07-13T00:00:00」 – 2012-07-24 01:52:57

+0

@Trekstuff:那麼SQL Server嚴重違反了標準。 – 2012-07-24 06:27:27

0

嘗試檢出BOL中的CONVERT函數T-SQL參考。你應該能夠使用這個指定日期的格式。

0

這是我的偏好:

AND restrictions_adddate BETWEEN 
    CONVERT(datetime, FLOOR(CONVERT(float, CAST('01-01-1900' AS DATETIME)))) 
    AND CONVERT(datetime, FLOOR(CONVERT(float, Getdate()))); 

這可以讓你比較日期(減去時間戳)。

+0

我試過這個,但我對大多數術語並不熟悉。這個比較日期究竟如何? – Dan 2011-05-26 14:18:45

+0

他與時間約會並刪除時間部分。這不是你的問題。 – MatBailie 2011-05-26 14:19:49

+0

@Dems,問題是如何比較兩個日期。無論我是否消除時間,這就是代碼的作用。我的示例顯示瞭如何使用當前日期以及要插入字符串的任何日期 - '01 -01-1900'。 – 2011-05-26 14:22:16