本文主要介绍Mysql的日期时间类型,包括DateTime、TimeStamp、Date、Time和Year的区别、sql语句中的比较,以及常用的日期时间函数
一、DateTime、TimeStamp、Date、Time和Year区分说明
1、DateTime
名称
|
说明
|
显示格式
|
YYYY-MM-DD HH:mm:ss
|
显示范围
|
1601-01-01 00:00:00 到 9999-12-31 23:59:59
|
应用场景
|
当业务需求中需要精确到秒时,可以用这个时间格式
|
后台取值
|
@JSONField(format=“yyyy-MM-dd HH:mm:ss”)
|
2、TimeStamp
名称
|
说明
|
显示格式
|
YYYY-MM-DD HH:mm:ss
|
显示范围
|
1601-01-01 00:00:00 到 9999-12-31 23:59:59
|
应用场景
|
当业务需求中需要精确到秒/毫秒时,或者需要不同时区,可以用这个时间格式
|
后台取值
|
@JSONField(format=“yyyy-MM-dd HH:mm:ss:SSS”)(这里只会精确到秒)
|
3、Date
名称
|
说明
|
显示格式
|
YYYY-MM-DD
|
显示范围
|
1601-01-01 到 9999-12-31
|
应用场景
|
当业务需求中只需要精确到天时,可以用这个时间格式
|
后台取值
|
@JSONField(format=“yyyy-MM-dd”)
|
4、Time
名称
|
说明
|
显示格式
|
HH:mm:ss
|
显示范围
|
00:00:00 到 23:59:59
|
应用场景
|
当业务需求中只需要每天的时间,可以用这个时间格式
|
后台取值
|
@JSONField(format=“HH:mm:ss”))
|
5、Year
名称
|
说明
|
显示格式
|
YYYY
|
显示范围
|
1601 到 9999
|
应用场景
|
当业务需求中只需要每年的,可以用这个时间格式
|
后台取值
|
@JSONField(format=“YYYY”))
|
重点说明一下DateTime和TimeStamp的区别
1、精确到毫秒都用TimeStamp
2、如果应用是需要适配不同时区的,有国内和国外的使用,使用TimeStamp就不会出现这种时差的问题,用dateTime就会出现各种各样的问题
二、SQL中关于日期时间的比较
mysql中时间的比较灵活,只要
格式相同
,可以直接使用 <、>、= 进行比较,适应所有时间字段,也可以使用 between and 来进行比较。
-- timestamp类型的时间比较
SELECT * FROM test where timestamp_clomun = '2023-08-29 11:54:22'
-- datetime类型的时间比较
select * from test where datetime_clomun = '2023-08-29 11:54:22'
-- time类型的时间比较
SELECT * FROM test where time_clomun = '11:54:22'
-- date类型的时间比较
SELECT * FROM test where date_clomun = '2023-08-29'
-- year类型的时间比较
SELECT * FROM test where year_clomun = '2023'
-- year类型的时间比较
SELECT * FROM test where year_clomun between '2003' and '2023'
-- 查询最近两天的数据
SELECT * FROM base_user u where u.crt_time >= now()-interval 2 day
三、日期时间函数
AddDate():增加一个日期(天、周等)--select ADDDATE(NOW(),INTERVAL 1 DAY)
AddTime():增加一个是时间(时、分等)--select ADDTIME(NOW(),"10:10:10")
Now():返回当前日期和时间--select Now()
CurDate():返回当前日期
CurTime():返回当前时间
Date():返回日期时间的日期部分
DateDiff():计算两个日期之差--select DATEDIFF("2020-08-01","2020-08-20")
-语法: datediff(string enddate, string startdate)。返回结束日期减去开始日期的天数
Date_Add():高度灵活的日期运算函数
Date_Sub(): 返回两个日期之间的间隔
-语法: date_sub (string startdate, int days)。 返回开始日期startdate减少days天后的日期。
Date_Format():返回一个格式化的日期或时间串
DayOfWeek():对于一个日期,返回对应的星期几,显示的一周是从周日开始周六结束,其中周日为1,周六为7
WeekDay(): 对于一个日期,返回对应的星期几,显示的一周是从周一开始周日结束,其中周一为0,周日为6--select DAYOFWEEK("2020-09-21"),WEEKDAY("2020-09-21")
Time():返回一个日期时间的时间部分--select TIME(now())
Year():返回一个日期的年份部分
Month():返回一个日期的月份部分
Day():返回一个日期的天数部分
Hour():返回一个时间的小时部分
Minute():返回一个时间的分钟部分
Second():返回一个时间的秒数部分