首页
mysql基础教程[basic]
详情
mysql日期时间函数
mysql
2024-01-14 18:27:22
499
1
总结了mysql日期时间函数的用法
获取当前系统的日期时间
- curdate()/current_date() 获取当前日期,按照 yyyy-MM-dd 或者 yyyyMMdd格式返回
- curtime()/current_time() 获取当前时间,按照 hh:mm:ss 或者 hhmmss格式返回
- current_timestamp() localtime() now() sysdate() 获取当前日期和时间
- 都有 字符串 和 数字 语境两种方式,默认返回字符串语境,func + 0 转换为 数字语境
-- 当前日期
select current_date() -- '2020-08-30' 字符串语境返回 yyyy-MM-dd
select current_date() + 0 -- '20200830' 数字语境返回yyyyMMdd
- utc_date():返回世界标准日期,yyyy-MM-dd\yyyyMMdd
- utc_time():返回世界标准时间,hh:mm:ss\hhmmss....
select utc_time() -- 15:45:15
select utc_time() + 0 --154515.000000
时间戳和普通时间日期格式互转
- unix_timestamp([d]):普通时间戳转unix时间戳,d 为可选项,不填返回当前时间戳
- from_unixtime(str):unix时间戳转为普通日期时间格式,yyyy-MM-dd hh:mm:ss
select unix_timestamp('2018-10-01 23:42:07.0') -- 1538408527
select from_unixtime(1538408527) -- 2018-10-01 23:42:07.0
获取日期属性
select year(now()) -- 返回年份 2020
select quarter(now()) -- 获取季度 1
select month(now()) -- 获取月份 03
select monthname(now()) -- 获取月份英文名称 august
-- 获取星期
-- 星期日索引,0-周日,1-周一,........,7-周六
-- 工作日索引,0-周一............,7-周日
select dayname(now()) -- Monday
select dayofweek(now()) -- 2
select weekday(now()) -- 0
-- 一年第几周
-- week(d,mode)
-- mode指定,周是从周一还是周日算起,返回周数在0-52 或者0-53之间
-- 如果忽略,则使用default_week_format系统变量的值
-- SHOW VARIABLES LIKE 'default_week_format' 查看
select week(now(),0) -- 35
-- 获取第几日
select dayofyear(d)
select dayofmonth(d)
select dayofweek(d) -- 1-周日........7-周六
select hour(time) -- 返回小时,范围0-23
select minute(time) -- 返回分钟,范围0-59
select second(time) -- 返回秒,范围0-59
时间日期计算
-- 日期时间加减运算
-- date_add(d,interval expr type)\adddate()
-- date_sub(d,interval expr type)\subdate()
-- addtime(d,expr)\subtime()
-- datediff(d1,d2)
-- type 格式:second\minute\hour\day\month\year\及其组合形式
select date_add('2020-08-30',interval 2 day) -- 2020-09-01
select date_sub('2020-08-30',interval 1 month) -- 2020-07-30
select addtime('2020-08-30 08:00:00','10:20:30') -- 2020-08-30 18:20:30
select datediff('2020-08-30','2020-08-15') -- 15
-- period_add(p,n)
-- 增加n个月到阶段p(YYMM/YYYYMM),以格式YYYYMM返回
select period_add(2008,2) -- 202010
-- period_diff(p1,p2)
-- p1,p2格式为yyyymm或者yymm格式
select period_diff(1901,202002) -- -12
时间日期格式化
- date_format(d,format_str)
- str_to_date(d, format_str)
select date_format(now(),'%y%m%d') -- 200830
select str_to_date('2016-01-02', '%Y-%m-%d %H') -- '2017-01-02 00:00:00.0'
select from_unixtime(1451997924) -- '2017-01-05 20:45:24'
其它
- to_days(date) 返回一个天数(从0年开始)
- from_days(n) 给出天数,返回日期
select to_days('2020-08-30') -- 738032
select from_days(738032) -- 2020-08-30
|
值 |
含义 |
秒 |
%S、%s |
两位数字形式的秒( 00,01, ..., 59) |
分 |
%I、%i |
两位数字形式的分( 00,01, ..., 59) |
小时 |
%H |
24小时制,两位数形式小时(00,01, ...,23) |
|
%h |
12小时制,两位数形式小时(00,01, ...,12) |
|
%k |
24小时制,数形式小时(0,1, ...,23) |
|
%l |
12小时制,数形式小时(0,1, ...,12) |
|
%T |
24小时制,时间形式(HH:mm:ss) |
|
%r |
12小时制,时间形式(hh:mm:ss AM 或 PM) |
|
%p |
AM上午或PM下午 |
周 |
%W |
一周中每一天的名称(Sunday,Monday, ...,Saturday) |
|
%a |
一周中每一天名称的缩写(Sun,Mon, ...,Sat) |
|
%w |
以数字形式标识周(0=Sunday,1=Monday, ...,6=Saturday) |
|
%U |
数字表示周数,星期天为周中第一天 |
|
%u |
数字表示周数,星期一为周中第一天 |
天 |
%d |
两位数字表示月中天数(01,02, ...,31) |
|
%e |
数字表示月中天数(1,2, ...,31) |
|
%D |
英文后缀表示月中天数(1st,2nd,3rd ...) |
|
%j |
以三位数字表示年中天数(001,002, ...,366) |
月 |
%M |
英文月名(January,February, ...,December) |
|
%b |
英文缩写月名(Jan,Feb, ...,Dec) |
|
%m |
两位数字表示月份(01,02, ...,12) |
|
%c |
数字表示月份(1,2, ...,12) |
年 |
%Y |
四位数字表示的年份(2015,2016...) |
|
%y |
两位数字表示的年份(15,16...) |
文字输出 |
%文字 |
直接输出文字内容 |
模式 |
星期的第一天 |
范围 |
星期 1 是第一天 |
0 |
Sunday |
0-53 |
一年中多一个星期天 |
1 |
Monday |
0-53 |
一年多3天 |
2 |
Sunday |
1-53 |
一年中多一个星期天 |
3 |
Monday |
1-53 |
一年多3天 |
4 |
Sunday |
0-53 |
一年多3天 |
5 |
Monday |
0-53 |
一年中多一个星期一 |
6 |
Sunday |
1-53 |
一年多3天 |
7 |
Monday |
1-53 |
一年中多一个星期一 |