数据库时间格式示例:
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'这种写法。