MySql查询时间段的方法

本文实例讲述了MySql查询时间段的方法。分享给大家供大家参考。具体方法如下:

MySql查询时间段的方法未必人人都会,下面为您介绍两种MySql查询时间段的方法,供大家参考。

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)

比如运行

代码如下:

SELECT UNIX_TIMESTAMP('2010-03-01 00:00:00')

返回1267372800

运行

代码如下:

SELECT FROM_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,总之这种方式有利于快速查询时间段,不过显示时间则需要再反转一次。

希望本文所述对大家的MySQL数据库程序设计有所帮助。

(0)

相关推荐

  • SQLServer查询某个时间段购买过商品的所有用户

    goods表如下: name time product A 2016-1-2 13:23:00 WFEY B 2016-2-17 11:43;34 ASG A 2017-1-10 15:23:00 SGH C 2015-4-5 13:47:20 HRT C 2016-7-12 19:56:03 XCC A 2017-3-4 14:00:00 ESFW SELECT DISTINCT OO.name FROM (SELECT name,DATE_FORMAT(time , '%h:%m') AS

  • MySql 按时间段查询数据方法(实例说明)

    时间格式为2008-06-16 查询出当天数据: SELECT * FROM `table` WHERE date(时间字段) = curdate(); 查询出当月字段: SELECT * FROM `table` WHERE month( 时间字段) = month( now( ) ) ; 时间格式为1219876-- UNIX时间,只要应用"FROM_UNIXTIME( )"函数 例如查询当月: SELECT * FROM `table` WHERE month( from_uni

  • mysql如何查询某一时间段内没有卖出的商品

    前端时间,室友拿来一道关于mysql查询的问题: 有3张表: 1,zd_product 产品表 zp_id主键(产品id) inputtime(产品发布时间) 2,zd_order订单表 zp_id外键(产品id)zo_id主键(订单id) zo_voer_time( 订单完成时间) 3,zd_ord_pro产品订单表 zo_id外键(订单id)zp_id(产品id) 问:通过这3张表查找从产品发布到"一个月内""没有"被卖出过的产品? 在这里我也不说我们是如何讨论

  • MySql查询时间段的方法

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

  • shell简单处理mysql查询结果的方法

    首先理清要了解shell脚本的数组与字符串的一些特性: str=("hello" "world" "!") #结果: str: 3 #普通的字符串数组 echo "str: " ${#str[@]} str1=("hello world !") #结果: str1: 1 #普通的字符串数组 echo "str1: "${#str1[@]} str2=(`echo "Hello

  • Mysql 如何查询时间段交集

    Mysql 查询时间段交集 使用场景 数据库表有两个字段starttime,endtime.现在给出(a,b)的时间段,查出和(starttime,endtime)时间段有交集的数据. sql select * from TABLENAME where (starttime > a AND starttime < b) OR (starttime < a AND endtime > b) OR (endtime > a AND endtime < b) OR (star

  • 如何设计高效合理的MySQL查询语句

    MySQL查询语句大家都在用,但是应该如何设计高效合理的MySQL查询语句呢?下面就教您MySQL查询语句的合理设计方法,分享给大家学习学习. 1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率.现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构.索引的使用要恰到好处,其使用原则如下: ●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引. ●在频繁进行排序或分组(即进行group by或order by操作)的列上

  • 浅谈mysql中多表不关联查询的实现方法

    大家在使用MySQL查询时正常是直接一个表的查询,要不然也就是多表的关联查询,使用到了左联结(left join).右联结(right join).内联结(inner join).外联结(outer join).这种都是两个表之间有一定关联,也就是我们常常说的有一个外键对应关系,可以使用到 a.id = b.aId这种语句去写的关系了.这种是大家常常使用的,可是有时候我们会需要去同时查询两个或者是多个表的时候,这些表又是没有互相关联的,比如要查user表和user_history表中的某一些数据

  • MySQL 开启慢查询日志的方法

    1.1 简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 1.2 登录数据库查看 [root@localhost lib]# mysql –uroot 因为没有设置设置密码,有密码的在 mysql –uroot –p 接密码 1.2.1 进入MySql 查询是否开了慢查询 mysql> show variables like 'slow_query%'; +---------------------+----------

  • mysql查询结果输出到文件的方法

    mysql查询结果导出/输出/写入到文件 方法一: 直接执行命令: mysql> select count(1) from table  into outfile '/tmp/test.xls'; Query OK, 31 rows affected (0.00 sec) 在目录/tmp/下会产生文件test.xls 遇到的问题: mysql> select count(1) from table   into outfile '/data/test.xls'; 报错: ERROR 1 (HY

  • MySQL查询和修改auto_increment的方法

    本文实例讲述了MySQL查询和修改auto_increment的方法.分享给大家供大家参考.具体如下: 查询表名为tableName的auto_increment值: 复制代码 代码如下: SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name="tableName"; 修改表名为tableName的auto_increment值: 复制代码 代码如下: ALTER TABLE tableName au

  • MySQL查询结果复制到新表的方法(更新、插入)

    MySQL中可以将查询结果复制到另外的一张表中,复制的话通常有两种情况,一种是更新已有的数据,另一种是插入一条新记录.下面通过例子来说明.首先构建两个测试表. 表t1: 表t2: 1.如果t2表中存在score值,将score更新到t1表中.方法如下: UPDATE t1,t2 SET t1.score = t2.score WHERE t1.id = t2.id AND t2.score IS NOT NULL 这就是将查询结果作为条件更新另一张表,当然,t2也可以是更为复杂的一个查询结果而不

  • 详解MySQL查询时区分字符串中字母大小写的方法

    如果你在mysql有唯一约束的列上插入两行值'A'和'a',Mysql会认为它是相同的,而在oracle中就不会.就是mysql默认的字段值不区分大小写?这点是比较令人头痛的事.直接使用客户端用sql查询数据库. 发现的确是大小不敏感 . 通过查询资料发现需要设置collate(校对) . collate规则: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: case sensitive collation,区分大小写 *

随机推荐