如果我想从MySQL数据表中筛选出某一个时间段内的数据,该怎样构建SQL语句呢?首先来看一下MySQL中的有关时间、日期的字段类型有哪些。

字段类型

  • DATE:表示1000-01-01~9999-12-31的日期, 格式为 YYYY-MM-DD
  • TIME:格式为HH:MM:SS,
  • DATETIME:DATE和TIME的组合,用空格隔开
  • TIMESTAMP:功能和DATETIME相同(但范围较小),时间戳显示
  • YEAR:用2位数字表示,范围是70(1970年)~69(2069 年),用4位数字表示,范围是1901年~2155年

DATETIME类型筛选

如果要查询的字段属于datetime类型,但是我想通过时间戳来进行时间筛选,因此需要先将格式化时间转换为时间戳。用的就是UNIX_TIMESTAMP(datetime)函数。

SELECT * FROM web_attack_ip WHERE UNIX_TIMESTAMP(attack_time) BETWEEN UNIX_TIMESTAMP('2017-08-10 14:48:29') AND UNIX_TIMESTAMP('2017-08-12 14:48:29') LIMIT 100;

TIMESTAMP类型筛选

如果要查询的字段类型属于TIMESTAMP类型的,那么无需任何转换,直接构建between and语句即可:

select * from xxxtable where update_time between '1465351800' and '1465391801';

格式化输出

如果数据库里面存的时间是时间戳格式的,但是我想将其格式化显示,那么需要的就是FROM_UNIXTIME(unixtime)函数。将下面语句中的时间戳换成字段名即可。

SELECT FROM_UNIXTIME(1563255818,"%Y-%m-%d %H:%i:%s") as time;

输出结果为:

+---------------------+
| time                |
+---------------------+
| 2019-07-16 13:43:38 |
+---------------------+
1 row in set (0.56 sec)