本文基于mysql8.0
本文介绍mysql关于日期和时间操作的函数。
日期和时间函数
| 函数 | 描述 |
|---|---|
| adddate() | 给日期值添加时间值 |
| addtime() | 添加time |
| convert_tz() | 从一个时区转换为另一个时区 |
| curdate() | 返回当前日期 |
| current_date(), current_date | 和curdate()同义 |
| current_time(), current_time | 和curdate()同义 |
| current_timestamp(), current_timestamp | 和now() 同义 |
| curtime() | 返回当前时间 |
| date() | 获取日期或日期时间表达式的日期部分 |
| date_add() | 将时间值(间隔)添加到日期值 |
| date_format() | 按指定格式格式化日期 |
| date_sub() | 从日期中减去时间值(间隔) |
| datediff() | 减去两个日期 |
| day() | 和 dayofmonth()同义 |
| dayname() | 返回工作日名称 |
| dayofmonth() | 返回月份的日期 (0-31) |
| dayofweek() | 根据参数返回工作日的排序 |
| dayofyear() | 返回一年中的某一天 (1-366) |
| extract() | 获取日期中的一部分 |
| from_days() | 将一天的序号转化为日期 |
| from_unixtime() | 将unix时间戳格式化为日期 |
| get_format() | 返回日期格式字符串 |
| hour() | 获取小时 |
| last_day | 返回参数月份的最后一天 |
| localtime(), localtime | 和now()同义 |
| localtimestamp, localtimestamp() | 和 now()同义 |
| makedate() | 从年和日创建日期 |
| maketime() | 从时、分、秒创建时间 |
| microsecond() | 从参数返回微秒 |
| minute() | 返回参数分钟 |
| month() | 返回已过日期起的月份 |
| monthname() | 返回月份名称 |
| now() | 返回当前日期和时间 |
| period_add() | 给年-月添加一段时间 |
| period_diff() | 返回一段时间之间的月数 |
| quarter() | 从日期参数返回季度 |
| sec_to_time() | 将秒转换为“hh:mm:ss”格式 |
| second() | 返回秒 (0-59) |
| str_to_date() | 将字符串转换为日期 |
| subdate() | 当使用三个参数调用时,和date_sub()同义 |
| subtime() | 减去时间 |
| sysdate() | 返回函数执行的时间 |
| time() | 根据传递的表达式获取时间 |
| time_format() | 格式为时间 |
| time_to_sec() | 返回转换为秒的参数 |
| timediff() | 时间相减 |
| timestamp() | 对于单个参数,此函数返回日期或日期时间表达式;对于两个参数,返回参数的和 |
| timestampadd() | 向日期时间表达式添加间隔 |
| timestampdiff() | 从日期时间表达式中减去间隔 |
| to_days() | 返回转换为天的日期参数 |
| to_seconds() | 返回从0年起转换为秒的日期或日期时间参数 |
| unix_timestamp() | 返回unix时间戳 |
| utc_date() | 返回当前utc日期 |
| utc_time() | 返回当前utc时间 |
| utc_timestamp() | 返回当前utc日期和时间 |
| week() | 返回星期数 |
| weekday() | 返回工作日序号 |
| weekofyear() | 返回日期(1-53)的日历周 |
| year() | 返回年 |
| yearweek() | 返回年份和星期 |
来看一看mysql常用日期和时间函数的示例。
获得当前日期时间
curdate()
以“yyyy-mm-dd”或yyyymmdd格式返回当前日期,具体取决于函数是在字符串上下文中使用还是在数字上下文中使用。
mysql> select curdate(); -> '2008-06-13' mysql> select curdate() + 0; -> 20080613
curtime([fsp])
以’hh:mm:ss’或hhmmss格式返回当前时间,具体取决于函数是在字符串上下文中使用还是在数字上下文中使用。该值以会话时区表示。
如果指定的fsp精度是从0到6的小数位数,则指定从0到6的小数精度。
mysql> select curtime(); -> '23:50:26' mysql> select curtime() + 0; -> 235026.000000
now([fsp])
以’yyyy-mm-dd hh:mm:ss’或yyyymmddhhmmss格式返回当前日期和时间,具体取决于函数是在字符串上下文中使用还是在数字上下文中使用。该值以会话时区表示。
mysql> select now(); -> '2007-12-15 23:50:26' mysql> select now() + 0; -> 20071215235026.000000
时间日期格式转化
同一个日期时间会有多种不同的表示方式,有的时候需要在不同格式之间相互转换。在mysql中用的是date_format()函数:
- date_format(date,format):根据格式字符串格式化日期值。
相关的格式如下,除了用于这个函数,格式还可以用于:str_to_date(), time_format(), unix_timestamp().
| 格式 | 描述 |
|---|---|
| %a | 缩写星期名 (sun..sat) |
| %b | 缩写月名 (jan..dec) |
| %c | 月, 数值 (0..12) |
| %d | 带有英文前缀的月中的天 (0th, 1st, 2nd, 3rd, …) |
| %d | 一个月里面的某一天, 数值 (00..31) |
| %e | 一个月里面的某一天, 数值 (0..31) |
| %f | 微秒 (000000..999999) |
| %h | 小时 (00..23) |
| %h | 小时 (01..12) |
| %i | 小时 (01..12) |
| %i | 分钟, 数值 (00..59) |
| %j | 一年中的某一天 (001..366) |
| %k | 小时 (0..23) |
| %l | 小时 (1..12) |
| %m | 月名 (january..december) |
| %m | 月份, 数值 (00..12) |
| %p | am or pm |
| %r | 时间, 12 – 小时 (hh:mm:ss am 或者 pm) |
| %s | 秒 (00..59) |
| %s | 秒 (00..59) |
| %t | 时间, 24 – 小时 (hh:mm:ss) |
| %w | 星期名 (sunday..saturday) |
| %w | 周几 (0=sunday..6=saturday) |
| %y | 年, 数值, 4 个数字 |
| %y | 年, 数值, 2 个数字 |
mysql> select date_format('2009-10-04 22:23:00', '%w %m %y');
-> 'sunday october 2009'
mysql> select date_format('2007-10-04 22:23:00', '%h:%i:%s');
-> '22:23:00'
mysql> select date_format('1900-10-04 22:23:00',
-> '%d %y %a %d %m %b %j');
-> '4th 00 thu 04 10 oct 277'
mysql> select date_format('1997-10-04 22:23:00',
-> '%h %k %i %r %t %s %w');
-> '22 22 10 10:23:00 pm 22:23:00 00 6'
mysql> select date_format('1999-01-01', '%x %v');
-> '1998 52'
mysql> select date_format('2006-06-00', '%d');
-> '00'
日期时间运算
- date_add(date,interval expr unit),
- date_sub(date,interval expr unit)
这些函数执行日期运算,来进行日期向前/向后的偏移。date参数指定开始日期或日期时间值。expr是一个表达式,指定从开始日期加上或减去的间隔值。expr被计算为一个字符串;它可以以-开头表示负间隔。unit是一个关键字,指示表达式应使用的单位。
mysql> select date_add('2018-05-01',interval 1 day);
-> '2018-05-02'
mysql> select date_sub('2018-05-01',interval 1 year);
-> '2017-05-01'
mysql> select date_add('2020-12-31 23:59:59',
-> interval 1 second);
-> '2021-01-01 00:00:00'
mysql> select date_add('2018-12-31 23:59:59',
-> interval 1 day);
-> '2019-01-01 23:59:59'
mysql> select date_add('2100-12-31 23:59:59',
-> interval '1:1' minute_second);
-> '2101-01-01 00:01:00'
mysql> select date_sub('2025-01-01 00:00:00',
-> interval '1 1:1:1' day_second);
-> '2024-12-30 22:58:59'
mysql> select date_add('1900-01-01 00:00:00',
-> interval '-1 10' day_hour);
-> '1899-12-30 14:00:00'
mysql> select date_sub('1998-01-02', interval 31 day);
-> '1997-12-02'
mysql> select date_add('1992-12-31 23:59:59.000002',
-> interval '1.999999' second_microsecond);
-> '1993-01-01 00:00:01.000001'
- datediff(expr1,expr2)
datediff()返回expr1−expr2,以从一个日期到另一个日期的天数表示。expr1和expr2是日期或日期和时间表达式。计算中只使用值的日期部分。
mysql> select datediff('2007-12-31 23:59:59','2007-12-30');
-> 1
mysql> select datediff('2010-11-30 23:59:59','2010-12-31');
-> -31
参考:
【1】:12.7 date and time functions
【2】: mysql 获得当前日期时间 函数
【3】:一文搞定mysql日期时间函数
到此这篇关于mysql日期与时间函数的文章就介绍到这了,更多相关mysql日期与时间函数内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!