2012-04-10 46 views
0

我得到执行此查询时,一个奇怪的回报:比较不同年份的日期在MySQL的

SELECT * FROM rrp 
WHERE end > "2012-12-31" 

不返回任何结果,但我对这个表,“结束”列大于"2012-12-31"一行:

RRP

id_r | id__b | start | end  | quantity 
27   29  2012-01-01 2012-05-05  1 
31   29  2012-11-01 2013-01-01  1 

编辑:startenddate领域

编辑:我用错了数据库,我的测试=>错误的结果 添加一天的日期,当这个问题被从Zend_Date的运算来:

$开始=“2012-12-31” ; $ nStart = new Zend_Date($ start,“YYYY-MM-dd”); $ end = new Zend_Date($ nStart); $ end-> addDay(1);

当我附和$结束:echo $end->get("YYYY-MM-dd");

它输出2013-12-31

+4

是“结束”实际上是一个日期字段?我知道MySQL有时会在转换数据时做奇怪的事情。 – 2012-04-10 15:41:18

+0

是的,对于不精确 – 2012-04-10 15:54:24

+2

有些东西你没有告诉我们 - 因为在你的问题中你写的所有东西*都应该工作 - [见这个非常简单的例子](http://www.sqlize.com/s4kzK77qFK)设置与你的问题一样(只使用最后一列) – ManseUK 2012-04-10 15:56:08

回答

2

最有可能的日期是如何格式化

一个问题,这将有助于
http://dev.mysql.com/doc/refman/5.0/en/using-date.html

+0

由于' “2012-12-31”和“2013-01-01”的格式相同,“2013-01-01”被配置为日期字段我不理解此输出 – 2012-04-10 15:56:04

+0

当使用像那样的日期字段时有时会在系统分配的末尾加上零,但不会显示,这会导致操作员在某些情况下关闭一天,例如:'20041003 23:00:00'大于'20041003',因为'20041003'是 相当于'20041003 00:00:00'。 – 2012-04-10 15:59:45

2

如果end是日期列,它应该按预期工作:

SELECT 
    STR_TO_DATE('2013-01-01', '%Y-%m-%d') < "2012-12-31", 
    STR_TO_DATE('2012-05-05', '%Y-%m-%d') < "2012-12-31" 

...在我的箱子中返回0, 1

唯一可能的缺点我能想到的是,系统的默认日期格式不%Y-%m-%d

SELECT @@DATE_FORMAT 

在这种情况下,你需要每次都指定格式:

SELECT * 
FROM rrp 
WHERE end > STR_TO_DATE('2012-12-31', '%Y-%m-%d')