12MySQL单行函数日期和时间函数

2022-08-20 11:48:20

目录

获取日期、时间

拓展:把日期或者时间转换成数值

日期与时间戳的转换

获取月份、星期、星期数、天数等函数

日期的操作函数

EXTRACT(type FROM date)函数中type的取值与含义:

 时间和秒钟转换的函数

计算日期和时间的函数

第一组

技巧:

上述函数中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'));

  • 作者:gh-xiaohe
  • 原文链接:https://blog.csdn.net/gh_xiaohe/article/details/124161233
    更新时间:2022-08-20 11:48:20