函数 | 用法 |
---|---|
YEAR(date)/MONTH(date)/DAY(date) | 返回具体的日期值 |
HOUR(time)/MINUTE(time)/SECOND(time) | 返回具体的时间值 |
MONYHNAME(date) | 返回月份 |
DAYNAME(date) | 返回星期几 |
WEEKDAY(date) | 返回周几 |
QUARTER(date) | 返回日期对应的季度 |
WEEK(date),WEEKOFYEAR(date) | 返回一年中的第几周 |
DAYOFYEAR(date) | 返回日期中是一年中的第几周 |
DAYOFMONTH(date) | 返回日期位于所在月份的第几天 |
DAYOFWEEK(date) | 返回周几 |
SELECT YEAR(CURDATE()),MONTH(CURDATE()),DAY(CURDATE())
HOUR(CURTIME()),MINUTE(NOW()),SECOND(SYSDAT())
FROM DUAL;
SELECT MONTHNAME('2021-10-26'),DAYNAME('2021-10-26'),
WEEKDAY('2021-10-26')
QUARTER(CURTIME()),WEEK(CURDATE),DAYOFYEAR(NOW()),
DAYOFMONTH(NOW()),DAYOFWEEK(NOW())
FROM DUAL;
#默认格式:yyyy-MM-dd
函数 | 用法 |
---|---|
CURDATE(),CURRENT_DATE() | 返回当前日期,只包含年、月、日 |
CURTIIME(),CURRENT_TIME() | 返回当前时间,只包含时、分、秒 |
NUW() | 返回当前系统日期和书记兼 |
UTC_DATE() | 返回UTC(世界标准日)日 |
UTC_TIME() | 返回UTC(世界标准时间)时间 |
SELECT CURDATE(),CURRENT_DATE(),NOW(),UTC_TIME()
FROM DUAL;
#日期与时间戳的转换
SELECT UNIX_TIMESTAMP(), #以UNIX时间戳的形式返回当前时间
UNIX_TIMESTAMP('2022-05-05 10:12:37'),
#将时间date以UNIX时间戳的形式返回
FROM_UNIXTIME(1635173853) #将UNIX时间戳的时间转换为普通格式化的时间
FROM DUAL;
#日期的操作函数
SELECT EXTRACT(SECOND FROM NOW()) #获取当前秒数
EXTRACT(DAY FROM NOW()) #获取当前天数
EXTRACT(HOUR_MINUTE FROM NOW()) #获取当前小时和愤怒中
EXTRACT(QUARTER FROM NOW()) #获取当前季度
FROM DUAL;
#时钟和秒钟转换
SELECT TIME_TO_SEC(CURTIME())
#具体秒数:转换公式:小时*3600+分钟*60+秒
SEC_TO_TIME(83355)
#将seconds描述转换为包含小时、分钟和秒的时间
FROM DUAL;
计算日期和时间的函数
DATE_ADD(dateTime,INTERVAL expr
type)返回与给定日期时间相差INTERVAL时间段的日期时期DATE_SUB(date,INTERVAL expr type),SUBDATE(date,INTERVAL expr type)返回与date相差INTERAVL时间间隔的日期
#计算日期和时间的函数
SELECT NOW(),DATE_ADD(NOW(),INTERVAL 1 YEAR) #加一年
#DATE_ADD(dateTime,INTERVAL expr type)返回与给定日期时间相差INTERVAL时间段的日期时间
DATE_SUB(NOW(),INTERVAL 1 YEAR) #减一年
#DATE_SUB(date,INTERVAL expr type),SUBDATE(date,INTERVAL expr type)返回与date相差INTERAVL时间间隔的日期
DATE_ADD(NOW(),INTERVAL 1 YEAR) AS co15 ,#可以是负数
DATE_ADD(NOW(),INTERVAL '1_1' YEAR_MONTH) AS CO16 #需要单引号
FROM DUAL;
函数 | 用法 |
---|---|
ADDTIME(time1,time2) | 返回time1加上time2的时间。当time2为一个数字时,代表的时秒,可以为负数。 |
SUBTIMETIME(time1,time2) | 返回time1减去time2后的时间,当time2为一个数字时,代表的是秒,可以为负数 |
DATEDIFF(date1,date2) | 返回date1减去date2间隔的天数 |
TIMEDIFF(time1,time2) | 返回time1减去time2的时间间隔 |
FROM_DAYS(N) | 返回从0000年1月1日起,N天以后的日期 |
TO_DAYS(date) | 返回日期date距离0000年1月1日的天数 |
LAST_DAY(date) | 返回date所在月份的最后一天日期 |
MAKEDATE(year,n) | 针对给定年份与所在年份中的天数返回一个日期 |
MAKETIME(hour,minute,second) | 将给定的小时、分钟和秒组合成时间并返回 |
PERIOD_ADD(time,n) | 返回time加上n后的时间 |
SELECT ADDTIME(NOW(),20),SUBTIME(NOW(),30),SUBTIME(NOW(),'1:1:3'),
DATEDIFF(NOW(),'2021-10-01'),TIMEDIFF(NOW(),'2021-10-25 22:10:10')
FROM_DAYS(366) # 0001-01-01
MAKEDATE(YEAR(NOW()),12) # 这一年的第12天
MAKETIME(10,21,23) # 返回 10:21:23
TO_DAYS('0000-12-25')# 359天
FROM DUAL;
- 格式化:日期—>字符串
- 解析:字符串—>日期
我们所谈的是:日期的显示格式化和解析
函数 | 用法 |
---|---|
DATE_FORMAT(date,fmt) | 按照字符串fmt格式化日期date值 |
TIME_FORMAT(time,fmt) | 按照字符串fmt格式化时间time的值 |
GET_FORMAT(date_type,format_type) | 返回日期字符串的显示格式 |
STR_TO_DATE(str,fmt) | 按照字符串fmt对str进行解析,解析为一个日期 |
SELECT DATE_FORMAT(CURDATE(),'%Y-%M-%D'),
DATE_FORMAT(NOW(),'%Y-%m-%d')
#%Y 4位数字表示年份 %y 两位数字表示年份
#%M 表示月份(英文大写) %m 两位数字表示月份(01、02...)
#%b 缩写的月名(Jan,Feb...)
#%D 4英文后缀表示月中的天数(1st,2nd,3rd...)
#%S和%s 两位数字表示秒(00,01,02...) %i 两位数字表示分钟(00,01,02)
#%H两位数字表示小时,24小时制(01,02...)
#%h两位数字表示小时,12小时制(01,02...)
FROM DUAL;
解析:
- DATE_FORMAT(date,fmt) 按照字符串fmt格式化日期date值
- TIME_FORMAT(time,fmt) 按照字符串fmt格式化时间time值
- GET_FORMAT(date_type,format_type) 返回日期字符串的显示格式
- STR_TO_DATE(str,fmt) 按照字符串fmt对str进行解析,解析为一个日期
日期需要写成24小时制
SELECT STR_TO_DATE('2021-October-25th 11:34:42 Monday 1 ','%Y-%M-%D %h:%i:%S %W %w')
#结果:2021-10-25 11:34:42
#%W一周的星期名称(Sunday...)
#%w以数字表示周中的天数(0=Sunday...)
#%T24小时制
#%r12小时制
#%pAM或者AM
FROM DUAL;
既不是解析也不是格式化:返回日期格式
SELECT GET_FORMAT(DATE,'USA')
#结果:%m.%d.%Y
FROM DUAL;