5 时间和秒钟转换的函数
TIME_TO_SEC(time)
将 time 转化为秒并返回结果值。转化的公式为: 小时*3600+分钟 *60+秒
SEC_TO_TIME(seconds)
将 seconds 描述转化为包含小时、分钟和秒的时间
代码示例
SELECT TIME_TO_SEC(CURTIME()), SEC_TO_TIME(53515) FROM DUAL;
6 计算日期和时间的函数
DATE_ADD(datetime, INTERVAL expr type), ADDDATE(date,INTERVAL expr type)
返回与给定日期时间相差INTERVAL时间段的日期时间
type的取值:
SELECT NOW(), DATE_ADD(NOW(),INTERVAL 1 YEAR), DATE_ADD(NOW(),INTERVAL -1 YEAR) FROM DUAL;
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) AS col1, DATE_ADD('2021-10-21 23:32:12',INTERVAL 1 SECOND) AS col2, ADDDATE('2021-10-21 23:32:12',INTERVAL 1 SECOND) AS col3, DATE_ADD('2021-10-21 23:32:12',INTERVAL '1_1' MINUTE_SECOND) AS col4, DATE_ADD(NOW(), INTERVAL -1 YEAR) AS col5, #可以是负数 DATE_ADD(NOW(), INTERVAL '1_1' YEAR_MONTH) AS col6 #需要单引号 FROM DUAL;
DATE_SUB(date,INTERVAL expr type),SUBDATE(date,INTERVAL expr type)
返回与date相差INTERVAL时间间隔的日期
type的取值:
SELECT NOW(), DATE_SUB(NOW(),INTERVAL 1 YEAR) FROM DUAL;
ADDTIME(time1,time2)
返回time1加上time2的时间。当time2为一个数字时,代表的是秒 ,可以为负数
SUBTIME(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), TO_DAYS('0000-12-25'), LAST_DAY(NOW()), MAKEDATE(YEAR(NOW()),32), MAKETIME(10,21,23), PERIOD_ADD(20200101010101,10) FROM DUAL;`在这里插入代码片`
SELECT # 日期转化为数值 CURDATE(), CURDATE() + 0, CURTIME() + 0, NOW() + 0 FROM DUAL;
7 日期的格式化与解析
格式化:日期 —> 字符串
解析: 字符串 —> 日期
这里指的是日期的显式格式化和解析
DATE_FORMAT(date,fmt)
按照字符串fmt格式化日期date值
TIME_FORMAT(time,fmt)
按照字符串fmt格式化时间time值
GET_FORMAT(date_type,format_type)
返回日期字符串的显示格式
既不是格式化也不是解析,用于得到日期的格式,如:
'%Y-%M-%D'
STR_TO_DATE(str, fmt)
按照字符串fmt对str进行解析,解析为一个日期
非GET_FORMAT 函数中fmt参数常用的格式符:
GET_FORMAT函数中date_type和format_type参数取值如下:
代码示例
#格式化: SELECT DATE_FORMAT(CURDATE(),'%Y-%M-%D'), DATE_FORMAT(NOW(),'%Y-%m-%d'), TIME_FORMAT(CURTIME(),'%h:%i:%S'), DATE_FORMAT(NOW(),'%Y-%M-%D %h:%i:%S %W %w %T %r') FROM DUAL;
#解析:格式化的逆过程 SELECT STR_TO_DATE('2021-October-25th 11:37:30 Monday 1','%Y-%M-%D %h:%i:%S %W %w'), GET_FORMAT(DATE,'USA'), DATE_FORMAT(CURDATE(),GET_FORMAT(DATE,'USA')) FROM DUAL;