mysql函数汇总之日期和时间函数
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.
日期和时间函数主要用来处理日期和时间值,一般的日期函数除了使用
date
类型的参数外,也可以使用datetime
或者timestamp
类型的参数,但会忽略这些值的时间部分。
获取当前日期的函数
curdate()
和current_date()
函数的作用相同,将当前日期按照yyyy-mm-dd
或yyyymmdd
格式的值返回。
+------------+----------------+---------------+
| 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
的格式返回。
+-----------+----------------+-------------+
| 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个函数的作用相同,均为返回当前日期和时间的值。
+---------------------+---------------------+---------------------+---------------------+
| 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
格式的数字。
+------------------+-----------------------+---------------------+
| 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)
函数互为反函数。示例:
+-----------------------------+
| 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
;
+------------+--------------+
| 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
;
+------------+--------------+
| utc_time() | utc_time()+0 |
+------------+--------------+
| 13:43:24 | 134324 |
+------------+--------------+
1 row in set (0.00 sec)
mysql>
获取月份的函数MONTH(date)和MONTHNAME(date)
month(date)
函数返回date
对应的月份。
+------+--------+--------+
| coll | coll_1 | coll_2 |
+------+--------+--------+
| 12 | 12 | 12 |
+------+--------+--------+
1 row in set (0.00 sec)
mysql>
monthname(date)
函数返回日期date
对应月份的英文全名;
+-------------------------+-----------------------+---------------------+
| 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
对应的工作日的英文名称;
+-----------------------+
| dayname('2022-07-12') |
+-----------------------+
| Tuesday |
+-----------------------+
1 row in set (0.00 sec)
mysql>
dayofweek(d)
函数返回d
对应的一周中的索引(位置,1表示周日,2表示周一,以此类推,7表示周六);
+------+--------+
| coll | coll_1 |
+------+--------+
| 3 | 4 |
+------+--------+
1 row in set (0.00 sec)
mysql>
weekday(d)
返回d
对应的工作日索引:0表示周一,1表示周二,以此类推,6表示周日。
+------+--------+
| 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
系统自变量的值,如下图:
例如:使用week()
函数查询指定日期是一年中的第几周;
+--------------------+--------------------+--------------------+
| 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)
查询指定日期是一年中的第几周;
+--------------------------+-----------------------+
| 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()
函数返回指定日期在一年中的位置;
+-------------------------+-------------------------+
| dayofyear('2022-07-13') | dayofyear('2022-01-01') |
+-------------------------+-------------------------+
| 194 | 1 |
+-------------------------+-------------------------+
1 row in set (0.00 sec)
mysql>
dayofmonth(d)
函数返回d
是一个月中的第几天,范围是1~31;
例如:使用dayofmonth()
函数返回指定日期在一个月中的位置,必须有具体年份才可以。
+--------------------------+----------------------+--------------------+
| 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
;
+--------------------+------------------+
| 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;
+-----------------------+---------------------+
| quarter('2022-07-13') | quarter('20330101') |
+-----------------------+---------------------+
| 3 | 1 |
+-----------------------+---------------------+
1 row in set (0.00 sec)
mysql>
minute(time)
返回time
对应的分钟数,范围是0~59。
+-------------------------------+--------------------+
| 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。
+-------------------------------+--------------------+
| 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()
相同,但它从日期中提取一部分,而不是执行日期运算。
+------+--------+--------+
| 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+秒
+-------------------------+
| time_to_sec('09:09:09') |
+-------------------------+
| 32949 |
+-------------------------+
1 row in set (0.00 sec)
mysql>
sec_to_time(seconds)
返回被转化为小时、分钟和秒数的seconds
参数值,其格式为hh:mm:ss
或者hhmmss
。
+-------------------------+--------------------+
| 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
为关键词,指示了表达式被解释的方式。
若date
参数是一个date
值,计算只会包含year
、month
和day
部分(没有时间部分),其结果是一个date
值,否则,结果将是一个datetime
值。
date_add(date, interval expr type)
和adddate(date, intervar expr type)
两个函数的作用相同,执行日期的加运算。
+---------------------+---------------------+---------------------+
| 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)
两个函数的作用相同,执行日期的减运算。
+---------------------+---------------------+---------------------+
| 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
是一个时间表达式。
+-----------------------------------------+-------------------------------+
| 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
是一个时间表达式。
+-----------------------------------------------+-----------------------------------------+
| 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()
函数计算两个日期之间的间隔天数;
+------+--------------------------------------------------------+
| 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
格式如下图:
示例:使用date_format()
函数格式化输出日期和时间值;
+---------------------+---------------------------+
| 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()
函数格式化输入时间值。
+-------------------------------------------+
| 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
根据两个值类型组合返回的字符串显示格式如下:
示例:使用get_format()
函数显示不同格式化类型下的格式字符串。
+-------------------------+-----------------------------+
| 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环境下搭建网站。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK