MySQL 时间日期类型和相关函数

MySQL 时间日期类型和相关函数

 

一、时间日期类型

MySQL中的日期和时间类型
类型字节最小值最大值零值
DATETIME81000-01-01 00:00:009999-12-31 23:59:590000-00-00 00:00:00
DATE41000-01-019999-12-310000-00-00
TIMESTAMP4197001010800012038年某时刻00000000000000
TIME3-838:59:59838:59:5900:00:00
YEAR1190121550000

 

TIMESTAMP返回的格式为"YYYY-MM-DD HH:MM:SS",宽度固定为19个字符,要想获得数字值,可以 select current_timestamp+0 的方式:


 

 

YEAR有2位(5.5.27之前的版本有)或4位格式的年,默认是4位格式,在4位格式中,允许的值1901 ~ 2155和0000,在2位格式中,允许的值是70 ~ 69,表示1970 ~ 2069,YEAR返回的格式为“YYYY”。

 

对于以上所有时间和日期类型,若想插入当前时间对应的值,可以用current_timestamp、now():


 
 

 

二、时间日期函数 

 

MySQL中的日期时间函数
函数功能格式
CURDATE()返回当前日期2016-10-29
CURTIME()返回当前时间11:20:34
NOW()返回当前的日期和时间2016-10-29 11:21:02

UNIX_TIMESTAMP(date)

UNIX_TIMESTAMP()

返回日期date的UNIX时间戳

执行:select unix_timestamp()

输出:1477711822

FROM_UNIXTIME(unix_timestamp)返回UNIX时间戳的日期值

执行:select from_unixtime(1477670400)

输出:2016-10-29 11:30:22

WEEK(date)返回日期date为一年中的第几周

执行:select week(curdate())

输出:43

YEAR(date)返回日期date的年份

执行: select year(curdate())

输出:2016

HOUR(time)返回time的小时值

执行:select hour(curtime());

输出:11

MINUTE(time)返回time的分钟值

执行:select minute(curtime())

输出:36

MONTHNAME(date)返回date的月份名

执行:select monthname(curdate())

输出October

DATE_FORMAT(date, format)返回按字符串format格式化日期date值

执行:select date_format(now(), '%Y年%c月%e日 %T时%i分%S秒');

输出:2016年10月29日 11:44:57时44分57秒

DATE_ADD(date,INTERVAL expr type)返回一个日期值加上一个时间间隔的时间值

执行:select now() current,date_add(now(),INTERVAL 1 day) after_one_day;

输出:2016-10-29 11:52:10 | 2016-10-30 11:52:10

DATEDIFF(expr1,expr2)返回起始时间expr1和结束时间expr2之间的天数

执行:select datediff('2016-10-20',now());

输出:-9

执行:select datediff(now(),'2016-10-20')

输出:9

 

UNIX_TIMESTAMP(date)和 FROM_UNIXTIME(unix_timestamp)是互逆作用的.

 

DATE_FORMAT(date,format)函数:

 

format字符串中的格式符:

MySQL中的日期和时间格式
格式符格式说明
%S和%s两位数字形式的秒(00, 01, ... , 59)
%i两位数字的分(00, 01, ... , 59)
%H两位数字形式的小时,24小时(00,01,...,23)

%h和%I

两位数字形式的小时,24小时(01,02,...,12)
%k数字形式的小时,24小时(0,1,2,...,23)
%l数字形式的小时,12小时(1,2,...,12)
%T24小时的时间形式(hh:mm:ss)
%r12小时的时间形式(hh:mm:ssAM或hh:mm:ssPM)
%pAM或PM
%W一周中每一天的名称(Sunday,Monday,...,Saturday)
%a一周中每一天的名称缩写(Sun,Mon,...,Sat)
%d两位数字表示月中的天数(00,01,...,31)
%e数字表示月中天数(1,2,...,31)
%D英文后缀表示月中的天数(1st,2nd,3rd,...)
%w数字形式表示周中的天数(0=Sunday,1=Monday...)
%j以3位数字表示年中天数(001,002,...,366)
%U年的周(0,1...,52),其中Sunday位周第一天
%u年的周(0,1...,52),其中Monday位周第一天
%M月名(January,February,...,December)
%b缩写的月名(Jan,Feb,...Dec)
%m两位数字表示的月份(01,02,...,12)
%c数字表示的月份(1,2,...,12)
%Y4位数字表示的年份
%y两位数字表示的年份
%%转义

 

实例:


 

 

 

 DATE_ADD(date,INTERVAL expr type):其中INTERVAL时间隔类型关键字,expr是一个表达式,对应后面的类型,type时间隔类型,其值如下表

MySQL日期间隔类型
表达式类型描述格式
HOUR小时hh
MINUTEmm
SECONDss
YEARYY

MONTH

MM
DAYDD
YEAR_MONTH年和月YY-MM
DAY_HOUR日和小时DD hh
DAY_MINUTE日和分钟DD hh:mm
DAY_SECOND日和秒DD hh:mm:ss
HOUR_MINUTE小时和分hh:mm
HOUR_SECOND小时和秒hh:ss
MINUTE_SECOND分钟和秒mm:ss

 

例如,得到3天5小时后的时间:

 

 

得到3天5小时前的时间:

 

 

关于datetime和timestamp

 

MySQL中datetime能保存的日期范围从1001年到9999年,精度为秒,存储时把日期和时间封装为YYYYMMDDHHMMSS的格式的整数中,与时区无关,使用8个字节存储。

 

timestamp类型能保存的日期范围从1970年1月1日到2038年12月31日,它存储的是时间戳,只用了4个字节,所以范围比datetime小很多,timestamp是和时区相关的。默认情况下,如果插入时没有指定第一个timestamp列的值,那么mysql会默认给设置当前时间。在更新一行记录时,也会更新第一个timestamp列的值为当前时间(除非指定了该列的值)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值