mysql数据库datetime格式(yyyy-MM-dd hh:mm:ss)的日期,查询指定时间段的数据的sql写法

数据库时间格式示例:

2021-01-05 00:00:00

2021-01-06 23:59:59

2021-01-07 00:00:00

注意:像这种带时分秒的datetime类型时间格式的数据,如果是直接用年月日去做查询条件,在查询时会自动将年月日后补上00:00:00,如果条件是yyyy-MM-dd,这样查询条件实际上是yyyy-MM-dd 00:00:00 

查询05跟06两天的数据,可以采用如下写法:

1.使用between...and...

如果只使用年月日查询,查询结果是不准确的。例如:

select * from (table) where (time) between ''2021-01-05" and "2021-01-06"

因为数据库时间为datetime类型,包含时分秒,sql条件中如果只包含年月日在查询时会自动补上00:00:00,条件中的between ''2021-01-05" and "2021-01-06",查询时候会被转成2021-01-05 00:00:00 以及 2021-01-06 00:00:00,这样06日当天的数据就只能查到00:00:00这一秒的数据。就算结束时间加一天改为07日,查询时结束时间转为2021-01-07 00:00:00,06当天的全天数据确实可以查询到了,但是数据库中时间为2021-01-07 00:00:00的这条数据同样会被查询出来,查询的结果就会多出07日的00:00:00这一秒的数据,数据就不准确了。

正确方法是:可以直接精确到秒去查询,这样就是准确的时间。

select * from (table) where (time) between ''2021-01-05 00:00:00" and "2021-01-06 23:59:59"

2.使用 >= (或者>) ... and <=(或者<) ...

如果条件使用的是 (time)  >= ...and (time) <= ...,这种两端都要包含的条件就相当于between,如果只用年月日查询结果是不准确的,需要直接准确到秒去选定范围。

如果一定要不带时分秒的话,根据查询的时候条件会自动补上00:00:00这一特性,可以选择使用>或者<这种一端不包含的写法。

1)精确到秒的写法如下:

select * from (table) where (time) >= '2021-01-05 00:00:00' and (time) <= '2021-01-06 23:59:59'

或者这种

select * from (table) where (time) >= '2021-01-05 00:00:00' and (time) < '2021-01-07 00:00:00'

2)如果一定要不带时分秒去查询,也可以写成:

select * from (table) where (time) >= '2021-01-05'  and (time) < '2021-01-07',

相当于上面的select * from (table) where (time) >= '2021-01-05 00:00:00' and (time) < '2021-01-07 00:00:00'这种写法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值