在Mysql中,关于日期的格式有三种类型:Data、Datatime、Timestamp
Data | Datatime | Timestamp | |
存储数据格式 | YYYY-MM-DD | YYYY-MM-DD hh:mm:ss | yyyymmddhhmmss |
支持的范围 | 1000-01-01 到 9999-12-31 |
1000-01-01 00:00:00 到 9999-12-31 23:59:59 |
1770-01-01到2037年
|
特殊说明 | 允许使用字符串或者数字来赋值。例如,12331212和‘1233-12-12’的存储结果为:1233-12-12 | 允许使用字符串或者数字来赋值。例如,12331212121212和‘1233-12-12 12:12:12’的存储结果都为:1233-12-12 12:12:12 | 给该类型字段赋值时,值必须大于19700101000000,否则会抛异常。 |
注意:对于datatime类型:
1、自动识别时间字符串:
当写入其他时间字符串时,只有数据库识别成功才能够写入成功,且是想要的数据;如果识别不了的时间值,会显示为:‘000-00-00 00:00:00’
2、查询时智能补全模式:
假设要查询某天的全部数据,当在where条件后写入where dt = ‘2021-12-01’时,想要查出一天的数据时。若dt的类型是date时,则可以查出;若dt的类型是datetime时或者其他类型,则无法查出。因为在MySQL中,会对时间类型进行自动补零。上面的实际语句为where dt = ‘2021-12-01 00:00:00’。
要想解决上面的问题有两种思路:
1、在service层中对传进来的时间进行拼接(next_day + " (一定要在这个位置加一个空格)00:00:00")
2、使用MySQL中的to_days(next_day)函数,使用between and