服务器租用 > 服务器相关 > linux > → 正文内容

mysql函数汇总之日期和时间函数

发布时间:2022-12-20 15:43 整理发布:鸿网互联

日期和时间函数主要用来处理日期和时间值,一般的日期函数除了使用??date???类型的参数外,也可以使用??datetime???或者??timestamp??类型的参数,但会忽略这些值的时间部分。

mysql函数汇总之日期和时间函数_linux

获取当前日期的函数

??curdate()???和??current_date()???函数的作用相同,将当前日期按照??yyyy-mm-dd???或??yyyymmdd??格式的值返回。

mysql> select curdate(), current_date(), curdate() + 0;+------------+----------------+---------------+| curdate() | current_date() | curdate() + 0 |+------------+----------------+---------------+| 2022-07-12 | 2022-07-12 | 20220712 |+------------+----------------+---------------+1 row in set (0.00 sec)mysql>

从上面看到,两个函数的作用是相同的,都返回了相同的系统当前日期。

??curdate()+0??将当前日期转换为数值型。

获取当前时间的函数

??curtime()???和??current_time()???函数的作用相同,将当前时间以??hh:mm:ss???或者??hhmmss??的格式返回。

mysql> select curtime(), current_time(), curtime()+0;+-----------+----------------+-------------+| curtime() | current_time() | curtime()+0 |+-----------+----------------+-------------+| 21:32:25 | 21:32:25 | 213225 |+-----------+----------------+-------------+1 row in set (0.00 sec)mysql>

从上面看到,两个函数的作用是相同的,都反悔了相同的系统当前时间。

获取当前日期和时间的函数

??current_timestamp()???、??localtime()???、??now()???和??sysdate()??这4个函数的作用相同,均为返回当前日期和时间的值。

mysql> select current_timestamp(), localtime(), now(), sysdate();+---------------------+---------------------+---------------------+---------------------+| current_timestamp() | localtime() | now() | sysdate() |+---------------------+---------------------+---------------------+---------------------+| 2022-07-12 21:34:52 | 2022-07-12 21:34:52 | 2022-07-12 21:34:52 | 2022-07-12 21:34:52 |+---------------------+---------------------+---------------------+---------------------+1 row in set (0.00 sec)mysql>

从上面看到,4个函数返回的结果是一样的。

UNIX时间戳函数

??UNIX_TIMESTAMP(date)???若无参数调用,则返回一个??UNIX??时间戳(‘1970-01-01 00:00:00’GMT之后的秒数)作为无符号整数。

其中,??GMT(Green wich mean time)???为格林尼治标准时间。若用??date???来调用??UNIX_TIMESTAMP()???,它会将参数值以??1970-01-0100:00:00GMT??后的秒数的形式返回。

??date???可以是一个??DATE???字符串、??DATETIME???字符串、??TIMESTAMP???或一个当地时间的??YYMMDD???或??YYYYMMDD??格式的数字。

mysql> select unix_timestamp(), unix_timestamp(now()), now();+------------------+-----------------------+---------------------+| unix_timestamp() | unix_timestamp(now()) | now() |+------------------+-----------------------+---------------------+| 1657633074 | 1657633074 | 2022-07-12 21:37:54 |+------------------+-----------------------+---------------------+1 row in set (0.00 sec)mysql>

??from_unixtime(date)???函数把??unix???时间戳转换为普通格式时间,与??unix_timestamp(date)??函数互为反函数。示例:

mysql> select from_unixtime('1657633074');+-----------------------------+| from_unixtime('1657633074') |+-----------------------------+| 2022-07-12 21:37:54.000000 |+-----------------------------+1 row in set (0.00 sec)mysql>

返回UTC日期的函数

??utc_date()???函数返回当前??utc???(世界标准时间)日期值,其格式为??yyyy-mm-dd???或者??yyyymmdd??;

mysql> select utc_date(), utc_date()+0;+------------+--------------+| utc_date() | utc_date()+0 |+------------+--------------+| 2022-07-12 | 20220712 |+------------+--------------+1 row in set (0.00 sec)mysql>

返回UTC时间的函数

??utc_time()???返回当前??utc???时间值,格式为??hh:mm:ss???或者??hhmmss??;

mysql> select utc_time(), utc_time()+0;+------------+--------------+| utc_time() | utc_time()+0 |+------------+--------------+| 13:43:24 | 134324 |+------------+--------------+1 row in set (0.00 sec)mysql>

获取月份的函数MONTH(date)和MONTHNAME(date)

??month(date)???函数返回??date??对应的月份。

mysql> select month('2022-12-12') as coll, month('20221212') as coll_1, month('221212') as coll_2;+------+--------+--------+| coll | coll_1 | coll_2 |+------+--------+--------+| 12 | 12 | 12 |+------+--------+--------+1 row in set (0.00 sec)mysql>

??monthname(date)???函数返回日期??date??对应月份的英文全名;

mysql> select monthname('2022-12-12'), monthname('20221212'), monthname('221212');+-------------------------+-----------------------+---------------------+| monthname('2022-12-12') | monthname('20221212') | monthname('221212') |+-------------------------+-----------------------+---------------------+| December | December | December |+-------------------------+-----------------------+---------------------+1 row in set (0.00 sec)mysql>

获取星期的函数DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d)

??dayname(d)???函数返回??d??对应的工作日的英文名称;

mysql> select dayname('2022-07-12');+-----------------------+| dayname('2022-07-12') |+-----------------------+| Tuesday |+-----------------------+1 row in set (0.00 sec)mysql>

??dayofweek(d)???函数返回??d??对应的一周中的索引(位置,1表示周日,2表示周一,以此类推,7表示周六);

mysql> select dayofweek('2022-07-12') as coll, dayofweek('2022-07-13') as coll_1;+------+--------+| coll | coll_1 |+------+--------+| 3 | 4 |+------+--------+1 row in set (0.00 sec)mysql>

??weekday(d)???返回??d??对应的工作日索引:0表示周一,1表示周二,以此类推,6表示周日。

mysql> select weekday('2022-07-12') as coll, weekday('2022-07-13') as coll_1;+------+--------+| coll | coll_1 |+------+--------+| 1 | 2 |+------+--------+1 row in set (0.00 sec)mysql>

获取星期的函数WEEK(d)和WEEKOFYEAR(d)

??week(d)???计算日期??d??是一年中的第几周。

??week()???的双参数形式允许指定该星期是否始于周日或者周一,以及返回值的范围是否为0~53或者1~53.若??mode???参数被省略,则使用??default_week_format??系统自变量的值,如下图:

mysql函数汇总之日期和时间函数_unix_02

例如:使用??week()??函数查询指定日期是一年中的第几周;

mysql> select week('2022-07-13'), week('2022-01-01'), week('2022-09-18');+--------------------+--------------------+--------------------+| week('2022-07-13') | week('2022-01-01') | week('2022-09-18') |+--------------------+--------------------+--------------------+| 28 | 0 | 38 |+--------------------+--------------------+--------------------+1 row in set (0.00 sec)mysql>

??weekofyear(d)???计算某一天位于一年中的第几周,范围是1~53,相当于??week(d,3)??;

例如:使用??weekofyear(d)??查询指定日期是一年中的第几周;

mysql> select weekofyear('2022-07-13'), week('2022-07-13', 3);+--------------------------+-----------------------+| weekofyear('2022-07-13') | week('2022-07-13', 3) |+--------------------------+-----------------------+| 28 | 28 |+--------------------------+-----------------------+1 row in set (0.00 sec)mysql>

从上面可以看出,两个函数返回结果相同。

获取天数的函数DAYOFYEAR(d)和DAYOFMONTH(d)

??dayofyear(d)???函数返回??d??是一年中的第几天,范围是1~366;

例如:使用??dayofyear()??函数返回指定日期在一年中的位置;

mysql> select dayofyear('2022-07-13'), dayofyear('2022-01-01');+-------------------------+-------------------------+| dayofyear('2022-07-13') | dayofyear('2022-01-01') |+-------------------------+-------------------------+| 194 | 1 |+-------------------------+-------------------------+1 row in set (0.00 sec)mysql>

??dayofmonth(d)???函数返回??d??是一个月中的第几天,范围是1~31;

例如:使用??dayofmonth()??函数返回指定日期在一个月中的位置,必须有具体年份才可以。

mysql> select dayofmonth('2022-07-13'), dayofmonth('220713'), dayofmonth('0713');+--------------------------+----------------------+--------------------+| dayofmonth('2022-07-13') | dayofmonth('220713') | dayofmonth('0713') |+--------------------------+----------------------+--------------------+| 13 | 13 | NULL |+--------------------------+----------------------+--------------------+1 row in set, 1 warning (0.00 sec)mysql>

获取年份、季度、小时、分钟和秒钟的函数

??year(date)???返回??date???对应的年份,范围是??1970~2069??;

mysql> select year('2022-07-13'), year('20330909');+--------------------+------------------+| year('2022-07-13') | year('20330909') |+--------------------+------------------+| 2022 | 2033 |+--------------------+------------------+1 row in set (0.00 sec)mysql>

小提示:

??00~69???转换为??2000~2069???,??70~99???转换为??1970~1999??。

??quarter(date)???返回??date??对应的一年中的季度值,范围是1~4;

mysql> select quarter('2022-07-13'), quarter('20330101');+-----------------------+---------------------+| quarter('2022-07-13') | quarter('20330101') |+-----------------------+---------------------+| 3 | 1 |+-----------------------+---------------------+1 row in set (0.00 sec)mysql>

??minute(time)???返回??time??对应的分钟数,范围是0~59。

mysql> select minute('2022-07-13 09:09:09'), minute('06:06:06');+-------------------------------+--------------------+| minute('2022-07-13 09:09:09') | minute('06:06:06') |+-------------------------------+--------------------+| 9 | 6 |+-------------------------------+--------------------+1 row in set (0.00 sec)mysql>

??second(time)???返回??time??对应的秒数,范围是0~59。

mysql> select second('2022-07-13 09:09:09'), second('06:06:06');+-------------------------------+--------------------+| second('2022-07-13 09:09:09') | second('06:06:06') |+-------------------------------+--------------------+| 9 | 6 |+-------------------------------+--------------------+1 row in set (0.00 sec)mysql>

获取日期的指定值的函数EXTRACT(type from date)

??extract(type from date)???函数所使用的时间间隔类型说明符与??date_add()???或??date_sub()??相同,但它从日期中提取一部分,而不是执行日期运算。

mysql> select extract(year from '2022-07-13') as coll, extract(year_month from '2022-07-13') as coll_1, extract(day_minute from '2022-07-13 09:08:07') as coll_2;+------+--------+--------+| coll | coll_1 | coll_2 |+------+--------+--------+| 2022 | 202207 | 130908 |+------+--------+--------+1 row in set (0.00 sec)mysql>

??type??为不同值时,返回的值不同:

时间和秒钟转换的函数

??time_to_sec(time)???返回已转化为秒的??time??参数。

转换公式为:小时*3600+分钟*60+秒

mysql> select time_to_sec('09:09:09');+-------------------------+| time_to_sec('09:09:09') |+-------------------------+| 32949 |+-------------------------+1 row in set (0.00 sec)mysql>

??sec_to_time(seconds)???返回被转化为小时、分钟和秒数的??seconds???参数值,其格式为??hh:mm:ss???或者??hhmmss??。

mysql> select time_to_sec('09:09:09'), sec_to_time(32949);+-------------------------+--------------------+| time_to_sec('09:09:09') | sec_to_time(32949) |+-------------------------+--------------------+| 32949 | 09:09:09 |+-------------------------+--------------------+1 row in set (0.00 sec)mysql>

从上面可以看到,??time_to_sec???和??sec_to_time??互为反函数。

计算日期和时间的函数

计算日期和时间的函数有:

在??date_add(date, interval expr type)???和??date_sub(date, interval expr type)??中:

若??date???参数是一个??date???值,计算只会包含??year???、??month???和??day???部分(没有时间部分),其结果是一个??date???值,否则,结果将是一个??datetime??值。

??date_add(date, interval expr type)???和??adddate(date, intervar expr type)??两个函数的作用相同,执行日期的加运算。

mysql> select date_add('2022-07-13 09:09:09', interval 1 second) as coll, adddate('2022-07-13 09:09:09', interval 1 second) as coll_1, date_add('2022-07-13 09:09:09', interval '1:1' minute_second) as coll_2;+---------------------+---------------------+---------------------+| coll | coll_1 | coll_2 |+---------------------+---------------------+---------------------+| 2022-07-13 09:09:10 | 2022-07-13 09:09:10 | 2022-07-13 09:10:10 |+---------------------+---------------------+---------------------+1 row in set (0.00 sec)mysql>

??date_sub(date, interval expr type)???或者??subdate(date, interval expr type)??两个函数的作用相同,执行日期的减运算。

mysql> select date_sub('2022-07-13 09:09:09', interval 31 day) as coll, subdate('2022-07-13 09:09:09', interval 31 day) as coll_1, date_sub('2022-07-13 09:09:09', interval '0 0:1:1' day_second) as coll_2;+---------------------+---------------------+---------------------+| coll | coll_1 | coll_2 |+---------------------+---------------------+---------------------+| 2022-06-12 09:09:09 | 2022-06-12 09:09:09 | 2022-07-13 09:08:08 |+---------------------+---------------------+---------------------+1 row in set (0.00 sec)mysql>

??addtime(date, expr)???函数将??expr???值添加到??date???,并返回修改后的值,??date???值一个日期或者日期时间表达式,而??expr??是一个时间表达式。

mysql> select adddate('2022-07-13 09:09:09', '1:1:1'), addtime('09:09:09', '1:1:20');+-----------------------------------------+-------------------------------+| adddate('2022-07-13 09:09:09', '1:1:1') | addtime('09:09:09', '1:1:20') |+-----------------------------------------+-------------------------------+| 2022-07-14 09:09:09 | 10:10:29 |+-----------------------------------------+-------------------------------+1 row in set, 1 warning (0.00 sec)mysql>

??subtime(date,expr)???函数将??date???减去??expr??值,并返回修改后的值。

其中,??date???是一个日期或者日期时间表达式,而??expr??是一个时间表达式。

mysql> select subtime('2020-07-13 09:09:09', '1:1:1 1:1:1'), subtime('2022-07-13 09:09:09', '1:1:1');+-----------------------------------------------+-----------------------------------------+| subtime('2020-07-13 09:09:09', '1:1:1 1:1:1') | subtime('2022-07-13 09:09:09', '1:1:1') |+-----------------------------------------------+-----------------------------------------+| 2020-07-13 08:08:08 | 2022-07-13 08:08:08 |+-----------------------------------------------+-----------------------------------------+1 row in set, 2 warnings (0.00 sec)mysql>

从上面可以看到,只计算了时间,日期并没有计算进去。

使用??datediff()??函数计算两个日期之间的间隔天数;

mysql> select datediff('2022-07-13 09:09:09', '2022-01-01') as coll, datediff('2022-07-13 09:09:09', '2022-07-10 08:08:08');+------+--------------------------------------------------------+| coll | datediff('2022-07-13 09:09:09', '2022-07-10 08:08:08') |+------+--------------------------------------------------------+| 193 | 3 |+------+--------------------------------------------------------+1 row in set (0.00 sec)mysql>

将日期和时间格式化的函数

??date_format(date,format)???根据??format???指定的格式显示??date??值。

主要??format??格式如下图:

mysql函数汇总之日期和时间函数_unix_04

示例:使用??date_format()??函数格式化输出日期和时间值;

mysql> select date_format('2022-07-13 09:08:07', '%W %M %Y') as coll, date_format('2022-07-13 09:08:07', '%D %y %a %d %m %b %j') as coll_1;+---------------------+---------------------------+| coll | coll_1 |+---------------------+---------------------------+| Wednesday July 2022 | 13th 22 Wed 13 07 Jul 194 |+---------------------+---------------------------+1 row in set (0.00 sec)mysql>

??time_format(time, format)???根据表达式??format???的要求显示时间??time ??。

表达式??format???指定了显示的格式。因为??time_format(time, format)???只处理时间,所以??format??只使用时间格式。

示例:使用??time_format()??函数格式化输入时间值。

mysql> select time_format('13:14:15', '%H %k %h %I %l');+-------------------------------------------+| time_format('13:14:15', '%H %k %h %I %l') |+-------------------------------------------+| 13 13 01 01 1 |+-------------------------------------------+1 row in set (0.00 sec)mysql>

??get_format(val_typr, format_type)??返回日期时间字符串的显示格式:

??get_format??根据两个值类型组合返回的字符串显示格式如下:

mysql函数汇总之日期和时间函数_mysql_05

示例:使用??get_format()??函数显示不同格式化类型下的格式字符串。

mysql> select get_format(date, 'eur'), get_format(datetime, 'jis');+-------------------------+-----------------------------+| get_format(date, 'eur') | get_format(datetime, 'jis') |+-------------------------+-----------------------------+| %d.%m.%Y | %Y-%m-%d %H:%i:%s |+-------------------------+-----------------------------+1 row in set (0.00 sec)mysql> mysql> select date_format('2022-07-13 09:08:07', get_format(datetime, 'jis')) as coll, date_format('2022-07-13 09:08:07', get_format(date, 'usa')) as coll_1;+---------------------+------------+| coll | coll_1 |+---------------------+------------+| 2022-07-13 09:08:07 | 07.13.2022 |+---------------------+------------+1 row in set (0.00 sec)mysql>

至此,本文结束。 

更多内容请转至VX公众号 “运维家” ,获取最新文章。

------ “运维家”  ------

------ “运维家”  ------

------ “运维家”  ------

linux中断异常,linuxuml建模,linux编译多个源文件,linux怎么更新时间,linux中的分页视频教程,

linux怎么解压gzip,linux解压某个目录,怎么关闭linux网关,linux文件架构图,linux提高权限执行,

linux文件用什么标志,网络安全linux加固,linux中查看邮件,linux修改背景颜色,linux环境下搭建网站。

您可能感兴趣的文章: