学习笔记——MYSQL时间日期函数

获取当前的时间

获取年月日时分秒

  • select now();
  • select sysdate();
    区别:now() 在执行开始时值就得到, sysdate() 在函数执行时动态得到值。
select now(),sleep(5),now();
+---------------------+----------+---------------------+
| now()               | sleep(5) | now()               |
+---------------------+----------+---------------------+
| 2020-07-25 14:25:20 |        0 | 2020-07-25 14:25:20 |
+---------------------+----------+---------------------+
1 row in set (5.02 sec)

select sysdate(),sleep(5),sysdate();
+---------------------+----------+---------------------+
| sysdate()           | sleep(5) | sysdate()           |
+---------------------+----------+---------------------+
| 2020-07-25 14:25:53 |        0 | 2020-07-25 14:25:58 |
+---------------------+----------+---------------------+
1 row in set (5.03 sec)

获取年月日

  • select current_date(); 或 select curdate();

获取时分秒

  • select current_time(); 或 select curtime();

注意:() 内表示保留多少位数字

时间格式的转换

字符串转换为日期格式

  • str_to_date(时间字符串,字符串日期格式)

日期的格式

格式描述
%Y年,4 位
%y年,2 位
%M英文名称的月名(一月为January,二月为February)
%m数值月份 (00-12)
%D带有英文后缀的天(不太直观)
%d数值天 (00-31)
%H小时 (00-23)
%h小时 (01-12)
%I小时 (01-12)
%i分钟,数值(00-59)
%S秒(00-59)
%s秒(00-59)
%a英文缩写星期名
%b英文缩写月名
%c月,数值
%f微秒
%p显示是 AM 还是 PM
%r显示时分秒时间,12小时制(hh:mm:ss AM 或 PM)
%T显示时分秒时间, 24小时制 (hh:mm:ss)
%j显示当前日期是今年的第几天 (001-366)
select str_to_date('08/09/2008', '%m/%d/%Y');
+---------------------------------------+
| str_to_date('08/09/2008', '%m/%d/%Y') |
+---------------------------------------+
| 2008-08-09                            |
+---------------------------------------+

select str_to_date('08.09.2008', '%m.%d.%Y');
+---------------------------------------+
| str_to_date('08.09.2008', '%m.%d.%Y') |
+---------------------------------------+
| 2008-08-09                            |
+---------------------------------------+

select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s');
+---------------------------------------------------------+
| str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s') |
+---------------------------------------------------------+
| 2008-08-09 08:09:30                                     |
+---------------------------------------------------------+

日期转换为特殊字符串形式

  • date_format (日期,字符串格式)
    能够把一个日期转换为各种样式的字符串
 select date_format(now(),'%Y-%M-%d %H') ;
+----------------------------------+
| date_format(now(),'%Y-%M-%d %H') |
+----------------------------------+
| 2020-July-25 15                  |
+----------------------------------+

提取时间信息

直接用year、month等日期函数提取

时间函数名作用
date获取日期(年月日)
time获取时间(时分秒)
year获取年份
month获取月份
day获取日
hour获取时
minute获取分
second获取秒
microsecond获取毫秒
quarter获取季度
week获取周
weekofyear获取周
dayofyear日期在年度中第几天
dayofmonth日期在月度中第几天
dayofweek日期在周中第几天;周日为第一天
weekday日期在周中第几天;周二为第一天
yearweek年和周
dayname返回英文星期
monthname返回英文月份
last_day返回月份中最后一天
例:
mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2020-07-25  |
+-------------+
1 row in set (0.03 sec)

mysql> select time(now());
+-------------+
| time(now()) |
+-------------+
| 16:02:01    |
+-------------+
1 row in set (0.02 sec)

mysql> select year(now());
+-------------+
| year(now()) |
+-------------+
|        2020 |
+-------------+
1 row in set (0.01 sec)

mysql> select day(now());
+------------+
| day(now()) |
+------------+
|         25 |
+------------+
1 row in set (0.02 sec)

mysql> select dayofyear(now());
+------------------+
| dayofyear(now()) |
+------------------+
|              207 |
+------------------+
1 row in set (0.02 sec)

日期的运算

对现有日期进行偏移

  • date_sub(日期, interval 要减少偏移的间隔 类型)
  • date_add(日期, interval 要增加偏移的间隔 类型)
时间函数名作用
YEAR增加减少年
MONTH增加减少月
DAY增加减少天
HOUR增加减少小时
MINUTE增加减少分钟
SECOND增加减少秒
MICROSECOND增加减少毫秒
WEEK增加减少周
QUARTER增加减少季度
SECOND_MICROSECOND增加减少秒到毫秒
MINUTE_MICROSECOND增加减少分钟到毫秒
MINUTE_SECOND增加减少分钟到秒
HOUR_MICROSECOND增加减少小时到毫秒
HOUR_SECOND增加减少小时到秒
HOUR_MINUTE增加减少小时到分钟
DAY_MICROSECOND增加减少天到毫秒
DAY_SECOND增加减少天到秒
DAY_MINUTE增加减少天到分钟
DAY_HOUR增加减少天到小时
YEAR_MONTH增加减少年到月
select date_add('2008-08-08 10:12:33', interval '01:10:30' hour_second);
+------------------------------------------------------------------+
| date_add('2008-08-08 10:12:33', interval '01:10:30' hour_second) |
+------------------------------------------------------------------+
| 2008-08-08 11:23:03                                              |
+------------------------------------------------------------------+

select date_add('2008-08-08 10:12:33', interval '01:10:30' hour);
+-----------------------------------------------------------+
| date_add('2008-08-08 10:12:33', interval '01:10:30' hour) |
+-----------------------------------------------------------+
| 2008-08-08 11:12:33                                       |
+-----------------------------------------------------------+

两个日期计算天数差

  • datediff (time1,time2)
    返回两个日期之间(time1-time2)的天数
select datediff('2008-08-08','2008-08-01');
+-------------------------------------+
| datediff('2008-08-08','2008-08-01') |
+-------------------------------------+
|                                   7 |
+-------------------------------------+

两个日期计算时间差

  • timediff(time1,time2)
    两个日期相减 time1 - time2,返回 time 差值。
    注意:timediff(time1,time2) 函数的两个参数类型必须相同。

两个日期得到指定差(推荐)

  • timestampdiff(unit,begin,end)
    返回end-begin的结果,其中begin和end是date或datetime格式
unit格式unit实际含义
YEAR年份
MONTH月份
DAY
HOUR小时
MINUTE分钟
SECOND
MICROSECOND微秒
QUARTER季度
WEEK周、
select timestampdiff(year,'2002-05-01','2003-01-01');
+-----------------------------------------------+
| timestampdiff(year,'2002-05-01','2003-01-01') |
+-----------------------------------------------+
|                                             0 |
+-----------------------------------------------+
1 row in set (0.00 sec)

select timestampdiff(year,'2002-05-01','2003-05-01');
+-----------------------------------------------+
| timestampdiff(year,'2002-05-01','2003-05-01') |
+-----------------------------------------------+
|                                             1 |
+-----------------------------------------------+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值