MySQL函数学习(三)-----日期和时间函数
注:笔记旨在记录
三、MySQL 日期和时间函数
3.1 获取时间、日期、年、月、日、周、日相关函数
\ | 函 数 名 称 | 作 用 |
---|---|---|
1 | CURDATE 和 CURRENT_DATE |
获取系统当前日期(YYYY-MM-DD) |
2 | CURTIME 和 CURRENT_TIME |
获取系统当前时间(hh-mm-ss) |
3 | TIME |
返回expr参数时间字符串(hh-mm-ss) |
4 | NOW 、CURRENT_TIMESTAMP 和 SYSDATE |
获取系统当前时间(YYYY-MM-DD hh-mm-ss) |
5 | YEAR 和 YEARWEEK |
返回date年 返回date的年+当前周次 |
6 | MONTH 和 MONTHNAME |
返回月份,返回月份英语名称 |
7 | WEEK 、 WEEKDAY 和 DAYOFWEEK |
一年中的第几周 、一周中的第几天 |
8 | DAYOFYEAR、DAYOFMONTH、DAY、DAYOFWEEK、DAYNAME |
年x日 月x日 月x日 周x日 周星期x |
3.1.1 CURDATE(), CURRENT_DATE(), CURRENT_DATE --获取当前日期(YYYY-MM-DD)
1). 函数:
CURDATE()
: 获取系统当前日期(YYYY-MM-DD)CURRENT_DATE()
: 与上等同CURRENT_DATE
: 与上等同
2). sql示例:
SELECT CURDATE(), CURRENT_DATE(), CURRENT_DATE,
CURDATE()+0, CURRENT_DATE()+0, CURRENT_DATE+ 0
都可在后面 '+0',转换为数值字符串
3.1.2 CURTIME(),CURRENT_TIME(),CURRENT_TIME -- 获取当前时间(hh-mm-ss)
1). 函数:
CURTIME()
: 获取系统当前时间(hh-mm-ss)CURRENT_TIME()
: 与上等同CURRENT_TIME
: 与上等同
2). sql示例:
SELECT CURTIME(), CURRENT_TIME(), CURRENT_TIME,
CURTIME()+0, CURRENT_TIME()+0, CURRENT_TIME+ 0
都可在后面 '+0',转换为数值字符串
3.1.3 TIME(expr) --返回expr时间字符串
1). 函数:
TIME(expr)
: 返回expr时间或日期的时间部分,返回字符串
2). sql示例:
SELECT TIME('2022-03-28 22:08:22'),TIME('132022'),TIME('13:20:22')
3.1.4. NOW(),SYSDATE(),CURRENT_TIMESTAMP --获取当前时间(YYYY-MM-DD hh-mm-ss)
1). 函数:
NOW()
: 获取系统当前时间(YYYY-MM-DD hh-mm-ss)SYSDATE()
: 与上等同CURRENT_TIMESTAMP
: 与上等同
2). sql示例:
SELECT NOW(),SYSDATE(),CURRENT_TIMESTAMP,SLEEP(2), NOW(),SYSDATE(),CURRENT_TIMESTAMP
SELECT NOW()+0,SYSDATE()+0,CURRENT_TIMESTAMP+0
都可在后面 '+0',转换为数值字符串
3.1.5. YEAR(date),YEARWEEK(date),YEARWEEK(date,mode) --返回date年[+当前周次]
1). 函数:
YEAR(date)
: 返回date年。YEARWEEK(date)
: 返回date的年+当前周次。YEARWEEK(date,mode)
: 返回date的年+当前周次,mode指定模式
2). sql示例:
SELECT YEAR('2022-03-28'), YEARWEEK('2022-03-27')
SELECT YEARWEEK('2022-03-27',1),YEARWEEK('2022-03-27',2),YEARWEEK('2022-03-27',3),YEARWEEK('2022-03-27',4),YEARWEEK('2022-03-27',5)
3.1.6. MONTH(date),MONTHNAME(date) -- 返回月份,月份英语名称
1). 函数:
MONTH(date)
:返回月份MONTHNAME(date)
: 返回月份名称
2). sql示例:
SELECT MONTH('2022-03-28'),MONTHNAME('2022-03-28')
3.1.7. WEEK(date[,mode]), WEEKDAY(date) ,DAYOFWEEK(date) -- 一年中的第几周 、一周中的第几天
1). 函数:
WEEK(date[,mode])
: 一年中的第几周,mode用于指定模式WEEKDAY(date)
: 一周中的第几天,从星期一开始计数,序号从0开始,0-6DAYOFWEEK(date)
: 一周中的第几天,从星期日开始计数,序号从1开始,1-7 ||所以与WEEKDAY(date)函数值相差2或5
2). sql示例:
SELECT WEEK('2022-03-28'),WEEKDAY('2022-03-28'),DAYOFWEEK('2022-03-28')
3.1.8. DAYOFYEAR(date),DAYOFMONTH(date),DAY(date),DAYOFWEEK(date),DAYNAME(date) -- 返回第几天或星期几
1). 函数:
DAYOFYEAR(date)
: 一年的第几天DAYOFMONTH(date)
等同于DAY(date)
: 当前月的第几天DAYOFWEEK(date)
: 一周的第几天(第一天为星期一)DAYNAME(date)
: 一周的星期几
2). sql示例:
SELECT DAYOFYEAR('2022-03-28'),DAYOFMONTH('2022-03-28'),DAY('2022-03-28'),DAYOFWEEK('2022-03-28'),DAYNAME('2022-03-28')
3.2 时间,时间计算,时间戳相关函数
\ | 函 数 名 称 | 作 用 |
---|---|---|
1 | UNIX_TIMESTAMP |
返回时间戳 |
2 | __FROM_UNIXTIME |
时间戳转时间 |
3 | TIME_TO_SEC 和a SEC_TO_TIME |
时间转秒,秒转时间 |
4 | DATE_ADD 和 ADDDATE |
时间增加,年月日时分秒毫秒等 |
5 | DATE_SUB 和 SUBDATE |
时间减少,年月日时分秒毫秒等 |
6 | ADDTIME 和 SUBTIME |
时间加减 |
3.2.1. UNIX_TIMESTAMP() -- 返回时间戳
1). 函数:
- UNIX_TIMESTAMP()`: 返回时间(无参时为当前时间)的时间戳,从'1970-01-01 00:00:00'GMT后开始计时
2). sql示例:
SELECT UNIX_TIMESTAMP('1970-01-01'),UNIX_TIMESTAMP('1970-01-01 00:00:00'),UNIX_TIMESTAMP('1970-01-01 23:59:59'),UNIX_TIMESTAMP('1970-01-02 00:00:00')
3.2.2. FROM_UNIXTIME(unix_timestamp,format) -- 时间戳转时间
1). 函数:
__FROM_UNIXTIME(unix_timestamp,format)
:将时间戳unix_timestamp转换为时间,可以指定输出时间的格式。与UNIX_TIMESTAMP()互为反函数。
2). sql示例:
SELECT UNIX_TIMESTAMP('2022-03-28'),FROM_UNIXTIME(1648396801),FROM_UNIXTIME(1648396822,'%Y-%m-%d %H:%i:%S')
注:
常用输出格式参数如下:
3.2.3. TIME_TO_SEC 和a SEC_TO_TIME -- 时间转秒,秒转时间
1). 函数:
TIME_TO_SEC(time)
:时间转秒。SEC_TO_TIME(seconds)
: 秒转时间
2). sql示例:
SELECT TIME_TO_SEC('22:22:22'),SEC_TO_TIME(80542)
3.2.4. DATE_ADD(date,INTERVAL expr unit),ADDDATE(date,INTERVAL expr unit),ADDDATE(expr,days) -- 时间增加
1). 函数:
DATE_ADD(date,INTERVAL expr unit)
:通过参数对时间date进行增加ADDDATE(date,INTERVAL expr unit)
:通过参数对时间date进行增加ADDDATE(expr,days)
:在日期expr基础上增加days天
2). sql示例:
SELECT '2022-03-28',
DATE_ADD('2022-03-28',INTERVAL 1 SECOND) as '1 SECOND',
DATE_ADD('2022-03-28',INTERVAL 1 HOUR) as '1 HOUR',
DATE_ADD('2022-03-28',INTERVAL '1:1' MINUTE_SECOND) as "'1:1' MINUTE_SECOND",
ADDDATE('2022-03-28',INTERVAL 7 MONTH) as '7 MONTH',
ADDDATE('2022-03-28',5) as "days = 5"
注:INTERVAL expr unit参数有多种选择,常用的有'SECOND'(秒),'MINURE'(分钟),'HOUR'(小时)等。
3.2.5. DATE_SUB(date,INTERVAL expr unit),SUBDATE(date,INTERVAL expr unit),SUBDATE(expr,days) -- 时间减少
1). 函数:
DATE_SUB(date,INTERVAL expr unit)
:通过参数对时间date进行减少SUBDATE(date,INTERVAL expr unit)
:通过参数对时间date进行减少SUBDATE(expr,days)
:在日期expr基础上减少days天
2). sql示例:
SELECT '2022-03-28',
DATE_SUB('2022-03-28',INTERVAL "1:3" HOUR_MINUTE) as '"1:3" HOUR_MINUTE',
DATE_SUB('2022-03-28',INTERVAL "2:3" MINUTE_MICROSECOND) as '"2:3" MINUTE_MICROSECOND',
DATE_SUB('2022-03-28',INTERVAL '1:1' YEAR_MONTH) as "'1:1' YEAR_MONTH",
SUBDATE('2022-03-28',INTERVAL "5:20" DAY_HOUR) as '"5:20" DAY_HOUR',
SUBDATE('2022-03-28',5) as "days = 5"
3.2.6. ADDTIME(expr1,expr2),SUBTIME(expr1,expr2) -时间加减
1). 函数:
ADDTIME(expr1,expr2)
: expr1基础上增加expr2时间SUBTIME(expr1,expr2)
: expr1基础上减少xpr2时间
2). sql示例:
SELECT '2022-03-28 12:12:12',
ADDTIME('2022-03-28 12:12:12','02:02:02') as "+ 02:02:02",
SUBTIME('2022-03-28 12:12:12','02:02:02') as "- 02:02:02",
SUBTIME('2022-03-28 12:12:12','02022') as " - 00:20:22"