0

日付を比較しているときに、いくつかの「奇妙な」結果が得られました。TIMESTAMPS 値を
table1持つ 2 つの行があり 、このクエリを作成すると:2009-08-26 23:39:562009-08-27 00:01:42

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

両方の行を返します (1 つだけを返す必要がある場合)。

さらに奇妙なことに、返された結果セットの行には同じ値があります。2009-08-26 23:39:56

しかし、このクエリを作成すると:

SELECT DATE(authorization_date) FROM table1

値を含む 2 つの行を正しく返し2009-08-262009-08-27

それで、ここに私の質問があります。正しい結果が返されるように比較するにはどうすればよいですか。何が間違っていますか? 内部結合に関連している可能性がありますか?

4

1 に答える 1

0

私は疑った:

  • タイムゾーンの不一致がいくつかありますが、あなたはそれを説明しているようです

  • 問題を混乱させている他のデータ...干渉している可能性のある他のデータはありますか?

これを再現してお役に立てれば幸いです。これが私のセットアップコードです。私は何が欠けていますか?

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)
于 2009-08-27T07:10:43.810 に答える