4

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

 2 years ago
source link: https://blog.51cto.com/u_12386780/5509763
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

获取当前日期的函数

​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函数汇总之日期和时间函数_mysql_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​​为不同值时,返回的值不同:

  • ​year​​:只返回年值
  • ​year_month​​:返回年与月份
  • ​day_minute​​:返回日、小时和分钟值

时间和秒钟转换的函数

​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()
  • adddate()
  • date_sub()
  • subdate()
  • addtime()
  • subtime()
  • date_diff()

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

  • ​date​​​是一个​​datetime​​​或者​​date​​值,用来指定起始时间。
  • ​expr​​​是一个表达式,用来指定从起始日期添加或减去的时间间隔值。对于负值的时间间隔,​​expr​​​可以以一个符号​​-​​开头。
  • ​type​​为关键词,指示了表达式被解释的方式。
  • mysql函数汇总之日期和时间函数_linux_03

若​​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)​​返回日期时间字符串的显示格式:

  • ​val_type​​​表示日期数据类型,包括​​date​​​、​​datetime​​​和​​time;​
  • ​format_type​​​表示格式化显示类型,包括​​eur​​​、​​interval​​​、​​iso​​​、​​jis​​​、​​usa​​。

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

mysql函数汇总之日期和时间函数_linux_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环境下搭建网站。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK