web-dev-qa-db-ja.com

MySQLタイムスタンプ選択期間

これからどこから始めるべきか本当にわからない。誰でも私を助け/正しい方向に向けることができますか?.

MySQLにタイムスタンプ列があり、たとえば2010年10月にあるすべてのタイムスタンプなどの日付範囲を選択したい。

ありがとう。

34
DRKM

通常、これは次のようになります。

SELECT * 
  FROM yourtable
 WHERE yourtimetimefield>='2010-10-01'
   AND yourtimetimefield< '2010-11-01'

しかし、Unixのタイムスタンプがあるため、次のようなものが必要になります。

SELECT * 
  FROM yourtable
 WHERE yourtimetimefield>=unix_timestamp('2010-10-01')
   AND yourtimetimefield< unix_timestamp('2010-11-01')
46

小数秒のないタイムスタンプのコンパクトで柔軟な方法は次のとおりです。

SELECT * FROM table_name 
WHERE field_name 
BETWEEN UNIX_TIMESTAMP('2010-10-01') AND UNIX_TIMESTAMP('2010-10-31 23:59:59')

秒の小数部と最新バージョンのMySQLを使用している場合は、>=および<演算子 Wouter's answer に従って。

以下は、秒の小数精度(使用中の最大精度)で定義された時間フィールドの例です。

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)
38
Cez
SELECT * FROM table WHERE col >= '2010-10-01' AND col <= '2010-10-31'
5
Dan Grossman

この質問に対して多くのコメントをしている人々を見ることができます。しかし、LIKEを単純に使用すると、テーブルからデータを取得する方が簡単になると思います。

SELECT * FROM table WHERE COLUMN LIKE '2013-05-11%'

LIKEを使用して、データのワイルド文字検索をポストします。これが問題を解決することを願っています。

4
abhijitcaps

このSQLクエリはデータを抽出します。簡単で高速です。

SELECT *
  FROM table_name
  WHERE extract( YEAR_MONTH from timestamp)="201010";
3
Juanma Font

可能な限り、where句の関数を列に適用しないでください。

SELECT *
  FROM table_name
 WHERE timestamp >= UNIX_TIMESTAMP('2010-10-01 00:00:00') 
   AND timestamp <  UNIX_TIMESTAMP('2010-11-01 00:00:00');

タイムスタンプ列に関数を適用すると(たとえば、FROM_UNIXTIME(timestamp)= ...)、インデックス作成がはるかに難しくなります。

3
Markus Winand

Mysqlタイムスタンプがある場合、2013-09-29 22:27:10 あなたはこれを行うことができます

 select * from table WHERE MONTH(FROM_UNIXTIME(UNIX_TIMESTAMP(time)))=9;

UNIXに変換してから、UNIX時間関数を使用して月(この場合は9月の場合は9)を抽出します。

0
Federico