mysql查询时间段

摘自51cto

MySql的时间字段有date、time、datetime、timestamp等,往往我们在存储数据的时候将整个时间存在一个字段中,采用datetime类型;也可能采用将日期和时间分离,即一个字段存储date,一个字段存储时间time。无论怎么存储,在实际应用中,很可能会出现包含“时间段”类型的查询,比如一个访问记录数据库,需要统计每天的访问数量,这个每天就是一个时间段。下面介绍MySql查询时间段的两种常见方法,其他数据库也可以类似实现。

方法一:传统方式,即指定开始时间和结束时间,用"between”或者"<",">"来建立条件,比如查询2010年3月1日到2010年3月2日的数据条数,则可以使用

select count(*) from sometable where datetimecolumn>=‘2010-03-01 00:00:00‘ and 
datetimecolumn<‘2010-03-02 00:00:00‘

但是,这种方法由于时间不是整数型数据,所以在比较的时候效率较低,所以如果数据量较大,可以将时间转换为整数型的UNIX时间戳,这就是方法二。

方法二:UNIX时间戳,每个时间对应了一个唯一的UNIX时间戳,该时间戳是从‘1970-01-01 00:00:00‘ 为0开始计时,每秒增加1。MySql内置了传统时间和UNIX时间的互换函数,分别为

UNIX_TIMESTAMP(datetime)
FROM_UNIXTIME(unixtime)

比如运行SELECTUNIX_TIMESTAMP(‘2010-03-01 00:00:00‘)

返回1267372800

运行SELECTFROM_UNIXTIME(1267372800)

返回‘2010-03-01 00:00:00‘

于是,我们可以将时间字段里的数据替换为整型的UNIX时间,这样,比较时间就成为整数比较了,建立索引后能大大提高效率。在查询的时候,需要把起点时间和结尾时间分别转换为UNIX时间再进行比较,如

select count(*) from sometable where datetimecolumn>=UNIX_TIMESTAMP(‘2010-03-01 00:00:00‘) and
datetimecolumn<UNIX_TIMESTAMP(‘2010-03-02 00:00:00‘)

也可以在调用程序中先转换为UNIX时间再传入MySql,总之这种方式有利于快速查询时间段,不过显示时间则需要再反转一次。

时间: 2024-10-09 18:21:15

mysql查询时间段的相关文章

MySql查询时间段的方法

本文实例讲述了MySql查询时间段的方法.分享给大家供大家参考.具体方法如下: MySql查询时间段的方法未必人人都会,下面为您介绍两种MySql查询时间段的方法,供大家参考. MySql的时间字段有date.time.datetime.timestamp等,往往我们在存储数据的时候将整个时间存在一个字段中,采用datetime类型:也可能采用将日期和时间分离,即一个字段存储date,一个字段存储时间time.无论怎么存储,在实际应用中,很可能会出现包含"时间段"类型的查询,比如一个访

MySQL 查询时间段内的数据

先来建表语句: SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `userId` bigint(20) NOT NULL, `fullName` varchar(64) NOT NULL, `use

mybatis查询mysql的时间段

mapper文件的写法为:(模糊查询,查询时间段) <if test="com_name!=null and com_name!=''"> and sc.com_name like CONCAT(CONCAT('%',#{com_name}),'%') </if> <if test="check_begin_date!=null and check_begin_date!=''"> <![CDATA[ and DATE_FO

mysql 查询某个日期时间段,每天同一时间段的数据

mysql 查询某个日期时间段,每天同一时间段的数据: SELECT * FROM t_a01_eltable WHERE DATE_FORMAT(acqtime,'%Y-%m-%d')>='2016-01-01' AND DATE_FORMAT(acqtime,'%Y-%m-%d')<='2016-05-20' AND DATE_FORMAT(acqtime,'%H')>=18 AND DATE_FORMAT(acqtime,'%H')<=19;

mysql查询特定时间段内的数据

SET FOREIGN_KEY_CHECKS=0; -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS t_user; CREATE TABLE t_user ( userId bigint(20) NOT NULL, fullName varchar(64) NOT NULL, userType varchar(16) NOT NULL, addedTime datetime NO

mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句

mysql查询今天.昨天.近7天.近30天.本月.上一月的SQL语句 这篇文章主要介绍了mysql查询今天.昨天.近7天.近30天.本月.上一月的SQL语句,一般在一些统计报表中比较常用这个时间段,需要的朋友可以参考下 mysql查询今天,昨天,近7天,近30天,本月,上一月数据的方法分析总结: 话说有一文章表article,存储文章的添加文章的时间是add_time字段,该字段为int(5)类型的,现需要查询今天添加的文章总数并且按照时间从大到小排序,则查询语句如下: 代码如下: select

mybatis查询时间段sql语句

页面表现形式: 查询Ro 页面传过来的就是字符串 public class QueryRo { private String beginTime; private String endTime; public String getBeginTime() { return beginTime; } public void setBeginTime(String beginTime) { this.beginTime = beginTime; } public String getEndTime()

mysql查询今天,昨天,近7天,近30天,本月,上一月数据

近期项目中用到了查询当月数据记录的功能,最初的想法是在逻辑业务里构造好时间段进行查询,当写sql语句时感觉挺麻烦.所以就到网上搜索了一下,看看是不是能有简单的方法.果然.网络资源非常强大.以下结合我的项目表来把mysql查询今天,昨天,近7天,近30天,本月,上一月数据的sql语句记录一下. 有一张ad_proTrack_t 表.追踪产品时间字段为crt_time 查询今天的信息记录: select * from ad_proTrack_t where to_days(crt_time) = t

Mysql查询时间优化

select  count(*) from table where buytime>='2011-5-31 00:00:00' and buytime<='2011-6-6 23:59:59' group by itemname select  count(*) from table where buytime>=unix_stamp('2011-5-31 00:00:00') and buytime<=unix_stamp('2011-6-6 23:59:59') group b