创建表t_date_and_datetime_test
表字段信息:
表数据:
1.1. 使用字段start_date(date类型)查询(不拼接时间格式的字符串):
SELECT
*
FROM
t_date_and_datetime_test
WHERE
start_date >= '2019-01-10'
AND start_date <= '2019-01-21'
查询结果:
能查出全部数据。
1.2. 使用字段start_date(date类型)查询(拼接时间格式的字符串):
SELECT
*
FROM
t_date_and_datetime_test
WHERE
start_date >= '2019-01-10 00:00:00'
AND start_date <= '2019-01-21 23:59:59'
查询结果:
能查出全部数据。
由此可知:date类型的字段不拼接时间格式的字符串也可以查询出所有数据。
2.1. 使用字段end_date(datetime类型)查询(不拼接时间格式的字符串):
SELECT
*
FROM
t_date_and_datetime_test
WHERE
end_date >= '2019-01-10'
AND end_date <= '2019-01-21'
查询结果:
最后一天的数据查询不出来!
2.2. 使用字段end_date(datetime类型)查询(拼接时间格式的字符串):
SELECT
*
FROM
t_date_and_datetime_test
WHERE
end_date >= '2019-01-10 00:00:00'
AND end_date <= '2019-01-21 23:59:59'
查询结果:
能查出全部数据。
2.3. 使用字段end_date(datetime类型)查询(使用日期函数date):
SELECT
*
FROM
t_date_and_datetime_test
WHERE
date( end_date ) >= '2019-01-10'
AND date( end_date ) <= '2019-01-21'
查询结果:
能查出全部数据。
代码中体现:
if (!EmptyUtil.isNullOrEmpty(tProductionDailyInfo.getStartDate())) {
tProductionDailyInfo.setStartDate(tProductionDailyInfo.getStartDate() + " 00:00:00");
}
if (!EmptyUtil.isNullOrEmpty(tProductionDailyInfo.getEndDate())) {
tProductionDailyInfo.setEndDate(tProductionDailyInfo.getEndDate() + " 23:59:59");
}
由此可知:datetime类型的字段必须拼接时间格式的字符串才可以查询出所有数据 或者 使用日期函数date进行转换。
结论:
1) date类型的字段直接查询即可,不需要拼接时间格式的字符串就可以查询出所有数据。
2) datetime类型的字段必须要拼接时间格式的字符串(00:00:00 / 23:59:59) 或者 使用日期函数date进行转换才可以查询出所有数据,数据才不会遗漏。