2011-05-26 114 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