mysql查询数据库中时间小于1分钟的记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql查询数据库中时间小于1分钟的记录相关的知识,希望对你有一定的参考价值。

以我有限的知识是先查询记录,然后用strtotime()格式化取差值对比时间。但这样就相对比较繁琐。
请问可不可以使用一条mysql语句做到呢???

如果数据库里的时间格式是yyyy-MM-dd HH:mm:ss 这样格式是可以用来比较大小的

date_sub(now(),interval 1 minute) < addtime

如果是其它格式的就用这个,如我的addtime是php的time();函数输出
SELECT * FROM content WHERE UNIX_TIMESTAMP(date_sub(now(),interval 1 minute)) < addtime
参考技术A 用DATE_SUB(NOW(),INTERVAL 1 MINUTE)获得一分钟前的时间

然后用你的时间字段和这个时间进行比较试试看
参考技术B 把你查询的字段加上strtotime就OK了 参考技术C e

MySQL中时间日期的问题

在项目开发中,往往会遇到时间日期的存储,而涉及到MySQL数据库,其中包含一些需要注意的点。

目录

时间日期类型建议使用date储存

DateTime和Timestamp的区别

时区信息

存储空间

使用时间戳存储时间



时间日期类型建议使用date储存

在开发中,有部分人会使用字符串的格式来存储时间日期,但从其数据类型大小来看,date所占用的字节数要少于varchar类型,并且对于一些需要使用操作时间日期的函数是无法使用的。对于日期参数使用date类型,或者需要时间日期,则使用Datetime。

DateTime和Timestamp的区别

这两种都属于MySQL的时间日期存储类型,其都可表示YYYY-MM-DD HH:MM:SS类型的时间。但两者之间还是有区别的。

时区信息

DateTime类型负责保存当前会话设置的时区所对应的时间,一旦所存储数据的数据库修改了时区,读取出来的参数时不正确的。

而Timestamp储存日期后,每次访问时会按照当前数据库的时区进行相关的计算。因此,针对与不同的时区读取出来的值是不同的。

下面通过数据库数据进行演示。

数据库表创建语句:

create table time_test(
    id int primary key auto_increment,
    date_time datetime not null,
    time_stamp timestamp not null
);

添加测试数据:

insert into time_test (date_time, time_stamp) VALUES (now(), now());

查看数据库表数据:

select * from time_test;

结果如下:

+----+---------------------+---------------------+
| id | date_time           | time_stamp          |
+----+---------------------+---------------------+
|  1 | 2021-07-10 20:39:01 | 2021-07-10 20:39:01 |
+----+---------------------+---------------------+

现在对数据库时区进行修改:

set time_zone = '+0:00';

再次对数据库表数据进行查询:

+----+---------------------+---------------------+
| id | date_time           | time_stamp          |
+----+---------------------+---------------------+
|  1 | 2021-07-10 20:39:01 | 2021-07-10 12:39:01 |
+----+---------------------+---------------------+

从结果中可以看到,DateTime类型的值不会根据数据库时区的变化而变化,而Timestamp会根据当前时区对数据进行更新修改。

存储空间

DateTime使用8个字节存储数据,并以实际格式为数据储存格式,其数据存储范围是1000-01-01 00:00:00 ~ 9999-12-31 23:59:59。

Timestamp使用4个字节存储数据,并以UTC(Universal Time Coordinated,协调世界时)为数据储存格式,其数据存储范围是1970-01-01 00:00:01 ~ 2037-12-31 23:59:59。

从存储数据的范围可以看出DateTime能够表示的时间范围更大。

使用时间戳存储时间

使用数值类型对时间日期进行储存,例如int,bigint。通过UNIX_TIMESTAMP函数将Timestamp类型的值进行转换。

使用时间戳来存储时间的优势是便于日期的排序及比较,并且效率更高。缺点是转换后的数据不易查看。

时间戳语句如下:

select UNIX_TIMESTAMP(now());

其结果为:

+-----------------------+
| UNIX_TIMESTAMP(now()) |
+-----------------------+
|            1625925300 |
+-----------------------+

以上是关于mysql查询数据库中时间小于1分钟的记录的主要内容,如果未能解决你的问题,请参考以下文章

Mysql查询将返回数据库中时间戳之间的空闲槽

Oracle查询一批数据,某字段的内容有重复数据,怎样取相同的记录中时间最近的一条

填补Mysql查询中时间序列空白的最佳方法

MySQL数据库代码中,两个exists语句同时出现同一查询语句中时,怎么理解,,越详细越好。,

SQL语句问题,查询时间字段与上条数据间隔小于10分钟的数据

mysql查询所用时间过长 如何优化?