2009-08-27 59 views
0

在比较日期时,我一直有一些“奇怪”的结果。
table1有两行带有时间戳值2009-08-26 23:39:562009-08-27 00:01:42
当我做这个查询:在mysql中日期比较(到时间戳列)的结果不正确

select * from table1 c 
INNER JOIN table2 r ON r.table1_id = c.id 
WHERE DATE(c.authorization_date) = '2009-08-26' 

返回两行(当它仅应返回一个)。

为了增加怪事在返回的结果集行具有塔相同的值:2009-08-26 23:39:56

但是如果我让这个查询:

SELECT DATE(authorization_date) FROM table1 

它正确返回两列值2009-08-262009-08-27

所以,我的问题来了。我如何进行比较,以便返回正确的结果,我做错了什么?可能与内部连接有关?

回答

0

我怀疑:

  • 一些时区discrepency,但你似乎已经占到该

  • 一些其他的数据是混淆的问题...有没有别的东西,可能会干扰?

希望我可以重新创建和帮助。这是我的设置代码。我错过了什么?

mysql> create table table1 (id integer primary key auto_increment, authorization_date TIMESTAMP); 
mysql> insert into table1 values (1, '2009-08-26 23:39:56'); 
mysql> insert into table1 values (2, '2009-08-27 00:01:42'); 
mysql> create table table2 (table1_id integer); 
mysql> insert into table2 values (1); 
mysql> insert into table2 values (2); 


    mysql> SELECT DATE(authorization_date) FROM c; 
    +--------------------------+ 
    | DATE(authorization_date) | 
    +--------------------------+ 
    | 2009-08-26    | 
    | 2009-08-27    | 
    +--------------------------+ 

    mysql> select * from table1 c INNER JOIN table2 r ON r.table1_id = c.id WHERE DATE(c.authorization_date) = '2009-08-26'; 
    +----+---------------------+-----------+ 
    | id | authorization_date | table1_id | 
    +----+---------------------+-----------+ 
    | 1 | 2009-08-26 23:39:56 |   1 | 
    +----+---------------------+-----------+ 
    1 row in set (0.00 sec) 
+0

对不起,我把我认为是足够的信息,但我不能更多的错误...这个设置没有问题,但我的原始设置。 我粘贴我的原始设置,希望你或任何人都可以告诉我我错在哪里。 – Cesar 2009-08-28 05:46:05

+0

@ndp:对我感到羞耻!!!问题是,table2有一个主要复合键 (我讨厌主复合键),所以内连接得到两行。 对不起,让你浪费你的时间,非常感谢! – Cesar 2009-08-28 07:04:08

+0

塞萨尔,很高兴帮助,它解决了。 – ndp 2009-08-28 15:38:14