Skip to content

6. 使用日期和时间

6.1 选择合适的日期或者时间变量类型

CCYY-MM-DD   : 1000-01-01 - 9999-12-31
hh:mm:ss     : -838:59:59 - 838:59:59
DateTime(CCYY-MM-DD hh:mm:ss)
    : 1000-01-01 00:00:00 - 9999-12-31 23:59:59
Timestamp
    : 1970-01-01 00:00:00 - 2037-12-31 23:59:59

6.2 MySQL 日期函数

# 进行日期的提取
Str_To_Date('May 13, 2007', '%M %D, %Y')
# 日期格式化
Date_Format(date, '%M %D, %Y');
# 时间格式化
Time_Format(time, '%T');
# 转换时区
Convert_Tz()
# 当前日期
CurDate()
# 当前时间
CurTime()
# 当前日期时间
Now()
# Utc
Utc_Date(), Utc_Time(), Utc_Timestamp()
格式化字符含义
%Y4 位年份
%y2 位年份
%M完整的月份名称(January-December)
%b月份的前三个字母(Jan-Dec)
%m数字月份, 带有前缀 0 (01-12)
%c数字月份, 无前缀(1-12)
%d数字日期, 带有前缀 0 (01-31)
%e数字日期, 无前缀 (1, 31)
%W工作日名称 (Sunday - Saturday)
%r时间, 12 小时, 以 AM - PM 结尾
%T时间, 24 小时制
%H小时, 带有前缀 0 (00-23)
%i分钟, 带有 0(00-59)
%s秒 (00-59)
%%‘%’ 文字字符

6.3 客户端

# 设置默认时区
mysqld --default-time-zone

6.4 Timestamp 的自动更新

# 根据设定来更新当前时间戳 + 更新当前时间戳
Create Table `t` (
    ts timestamp Not Null Default Current_Timestamp
       On Update Current_Timestamp
)

6.5 日期分离函数

函数返回值
Year()
Month()
MonthName()月完整名称 (January-December)
DayOfMonth()1…31
DayName()一周中的天数 (Sunday-Saturday)
DayOfWeek()1-7, 对应 (Sunday - Saturday)
WeekDay()0-6, 对应 (Monday - Sunday)
DayOfYear()一年中的天数值 (1…366)
Hour()小时数
Minute()分钟数
Second()秒数

6.6 日期组成函数

# 合成时间
MakeTime(10, 30, 30)
# 合成日期
MakeDate(2007, 60)
# 时间 + 秒的转换
Time_To_Sec()
Sec_To_Time()
# 时间 + 日期的转换
To_Days()
From_Days()
# 时间戳转换
Unix_TimeStamp()
From_UnixTime()

6.7 计算时间间隔

# 日期间隔
DateDiff(date1, date2)
# 时间间隔
TimeDiff(time1, time2)
# 时间戳间隔
TimestampDiff(Unit, dt1, dt2)

6.8 时间计算

# 时间加法
AddTime()
# 时间/日期时间 相加
Timestamp()
DateAdd(d, interval)
DateSub(d, interval)
d + Interval val unit
d - Interval val unit
# 计算生日
TimestampDiff(unit, birth, current)

说明

创建时间: 2023-01-15 00:29:00 , 最后编辑于 2023-12-08 00:55:00