目录
EXTRACT(type FROM date)函数中type的取值与含义:
上述 非GET_FORMAT 函数中fmt参数常用的格式符:
GET_FORMAT函数中date_type和format_type参数取值如下:
获取日期、时间
函数 用法 CURDATE(),CURRENT_DATE() 返回当前日期,只包含年、月、日 CURTIME() , CURRENT_TIME() 返回当前时间,只包含时、分、秒 NOW() / SYSDATE() / CURRENT_TIMESTAMP() /
LOCALTIME() /LOCALTIMESTAMP()
返回当前系统日期和时间 UTC_DATE() 返回UTC(世界标准时间)日期 UTC_TIME() 返回UTC(世界标准时间)时间 语句
#获取日期、时间 SELECT CURDATE(),CURRENT_DATE(),CURTIME(),NOW(),SYSDATE(), UTC_DATE(),UTC_TIME() FROM DUAL;
结果
拓展:把日期或者时间转换成数值
# 把日期或者时间转换成数值 SELECT CURDATE(),CURDATE() + 0,CURTIME() + 0,NOW() + 0 FROM DUAL;
日期与时间戳的转换
函数 用法 UNIX_TIMESTAMP() 以UNIX时间戳的形式返回当前时间。SELECT UNIX_TIMESTAMP() - >1634348884 UNIX_TIMESTAMP(date) 将时间date以UNIX时间戳的形式返回。 FROM_UNIXTIME(timestamp) 将UNIX时间戳的时间转换为普通格式的时间 语句
SELECT UNIX_TIMESTAMP(),UNIX_TIMESTAMP('2022-04-14 00:13:57'),FROM_UNIXTIME(1649866390)
结果
获取月份、星期、星期数、天数等函数
函数 用法 YEAR(date) / MONTH(date) / DAY(date) 返回具体的日期值 HOUR(time) / MINUTE(time) /SECOND(time) 返回具体的时间值 MONTHNAME(date) 返回月份:January,... DAYNAME(date) 返回星期几:MONDAY,TUESDAY.....SUNDAY WEEKDAY(date) 返回周几,注意,周1是0,周2是1,。。。周日是6 QUARTER(date) 返回日期对应的季度,范围为1~4 WEEK(date) , WEEKOFYEAR(date) 返回一年中的第几周 DAYOFYEAR(date) 返回日期是一年中的第几天 DAYOFMONTH(date) 返回日期位于所在月份的第几天 DAYOFWEEK(date) 这一周的第几天
注意:周日是1,周一是2,。。。周六是7
语句
#获取月份、星期、星期数、天数等函数 SELECT YEAR(CURDATE()) "年",MONTH(CURDATE()) "月",DAY(CURDATE()) "天", HOUR(CURTIME()) "小时",MINUTE(NOW()) "分钟",SECOND(SYSDATE()) "秒" FROM DUAL;
结果
语句2
SELECT MONTHNAME('2022-4-14') "月份",DAYNAME('2022-4-14') "星期几",WEEKDAY('2022-4-14') "周几", QUARTER(CURDATE()) "四季",WEEK(CURDATE()) "第几周",DAYOFYEAR(NOW()) "一年第几天", DAYOFMONTH(NOW()) "月份的第几天",DAYOFWEEK(NOW()) "这一周的第几天" FROM DUAL;
结果
日期的操作函数
函数 用法 EXTRACT(type FROM date) 返回指定日期中特定的部分,type指定返回的值 EXTRACT(type FROM date)函数中type的取值与含义:
语句
SELECT EXTRACT(SECOND FROM NOW()) "秒数",EXTRACT(DAY FROM NOW()) "天数", EXTRACT(HOUR_MINUTE FROM NOW()) "小时",EXTRACT(QUARTER FROM '2022-05-12')"季度" FROM DUAL;
结果
时间和秒钟转换的函数
函数 用法 TIME_TO_SEC(time) 将 time 转化为秒并返回结果值。转化的公式为: 小时*3600+分钟*60+秒 SEC_TO_TIME(seconds) 将 seconds 描述转化为包含小时、分钟和秒的时间 语句
SELECT NOW(),TIME_TO_SEC(CURTIME()), SEC_TO_TIME(2494) FROM DUAL;
结果
计算日期和时间的函数
第一组
技巧:
只要记住一组即可,整数 加 负数 减
函数 用法 DATE_ADD(datetime, INTERVAL expr type),
ADDDATE(date,INTERVAL expr type)
返回与给定日期时间相差INTERVAL时 间段的日期时间 DATE_SUB(date,INTERVAL expr type),
SUBDATE(date,INTERVAL expr type)
返回与date相差INTERVAL时间间隔的 日期 上述函数中type的取值:
语句1
SELECT NOW(),DATE_ADD(NOW(),INTERVAL 1 YEAR), # 在 现在时间上加 一年 DATE_ADD(NOW(),INTERVAL -1 YEAR),# 在 现在时间上减 一年 DATE_SUB(NOW(),INTERVAL 1 YEAR) FROM DUAL;
结果
语句2
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) "现在时间加上一天", DATE_ADD(NOW(),INTERVAL 1 SECOND) AS "现在时间加上一秒", ADDDATE(NOW(),INTERVAL 1 SECOND) "现在时间加上一秒,另一张写法", DATE_ADD(NOW(),INTERVAL '1_1' HOUR_MINUTE) AS "现在时间加上一小时和一分钟", DATE_ADD(NOW(), INTERVAL -1 YEAR) "现在时间减去一年", #可以是负数 DATE_ADD(NOW(), INTERVAL '1_1' YEAR_MONTH) "现在时间加上一年和一个月" #需要单引号 # 加一年 同时 一个月 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) "+20s", SUBTIME(NOW(),30) "-30s", SUBTIME(NOW(),'1:1:3') "-1小时1分钟3秒" FROM DUAL; SELECT # 差值 两个日期 DATEDIFF(NOW(),'2023-04-14') "返回现在时间 与 此时间的隔离天数", TIMEDIFF(NOW(),'2022-05-14 00:47:54') "返回现在时间 与 此时间的 时间间隔", FROM_DAYS(366) "返回从0000年1月1日起,366天以后的日期", TO_DAYS('0000-12-25') "返回日期date距离0000年1月1日的天数"; SELECT LAST_DAY(NOW()) "所在月份的最后一天", MAKEDATE(YEAR(NOW()),32) "返回现在的年份 2022 在 加上 数值【32】 为 2022-02-01", MAKETIME(10,21,23) "给定的时分秒组合", PERIOD_ADD(20200101010101,10) # 在此时间上加 10 MySQL 5.7 不好使 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进行解析,解析为一个日期 上述 非GET_FORMAT 函数中fmt参数常用的格式符:
格式化:
#格式化: 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('2022-April-14th 01:41:42 Thursday 4','%Y-%M-%D %h:%i:%S %W %w') FROM DUAL;
GET_FORMAT函数中date_type和format_type参数取值如下:
使用格式化类型
SELECT GET_FORMAT(DATE,'USA'),DATE_FORMAT(CURDATE(),GET_FORMAT(DATE,'USA')) FROM DUAL;
SELECT DATE_FORMAT(CURDATE(),'%m.%d.%Y'),DATE_FORMAT(CURDATE(),GET_FORMAT(DATE,'USA'));