Kompaktowy, elastyczne metody dla znaczników czasu bez ułamków sekund będzie:
SELECT * FROM table_name
WHERE field_name
BETWEEN UNIX_TIMESTAMP('2010-10-01') AND UNIX_TIMESTAMP('2010-10-31 23:59:59')
Jeśli używasz ułamkowych sekund i najnowszej wersji MySQL, lepiej jest podejść do korzystania z operatorów >=
i <
zgodnie z Wouter's answer.
Oto przykład pól czasowych zdefiniowane w części sekundy precyzją (maksymalna precyzja w użyciu):
mysql> create table time_info (t_time time(6), t_datetime datetime(6), t_timestamp timestamp(6), t_short timestamp null);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into time_info set t_time = curtime(6), t_datetime = now(6), t_short = t_datetime;
Query OK, 1 row affected (0.01 sec)
mysql> select * from time_info;
+-----------------+----------------------------+----------------------------+---------------------+
| 22:05:34.378453 | 2016-01-11 22:05:34.378453 | 2016-01-11 22:05:34.378453 | 2016-01-11 22:05:34 |
+-----------------+----------------------------+----------------------------+---------------------+
1 row in set (0.00 sec)
Niestety, nie wspomniano powyżej, jest to uniksowy znacznik czasu, a nie znacznik czasu mysql. – DRKM
Widziałem ten post, a mój znacznik czasu działa dobrze problemu, z którym się teraz borykam, jeśli wywołanie go z łączeniem zawsze przywraca zerowe wiersze zwrócone ... moje zapytanie wygląda tak: SELECT * FROM db.t1, db.t2 GDZIE t2 .t1_id = t1.id ORAZ znacznik czasu> = "2014-06-21" ORAZ znacznik czasu <= '2014-07-20'; –