关于Mysql的日期时间类型区分、比较和常用函数

本文主要介绍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():返回一个时间的秒数部分

猜你喜欢

转载自blog.csdn.net/m0_37258559/article/details/130754898
今日推荐