1 时间类型

mysql时分秒对比 mysql 时分秒_mysql时分秒对比

MySQL保存日期格式使用 YYYY-MM-DD HH:MM:SS的ISO 8601标准
向数据表储存日期与时间必须使用ISO格式

   DATATIME与TIMESTAMP的差异区别

   在实际应用的很多场景中,MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下,会展现出他们各自的优劣。下面就来总结一下两种日期类型的区别。

   1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。
   2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在MySQL服务器,操作系统以及客户端连接都有时区的设置。
   3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。
   4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。

2 基本操作

   以下示例将创建一张数据表,并且插入一些时间类型的数据。

   使用now()函数可获取当前时间

mysql>

   也可以使用字符串的形式进行插入,但是要严格按照格式进行插入。

mysql>

3 设默认值

   使用DATATIME时由于其没有默认值的设定,故我们需要为它设定默认值。

   以下示例将演示创建出一张user表,并设置regtime字段,不用手动插入时间而是自动生成。

mysql>

4 查询格式化

4|1参数介绍

格式    描述
%a    缩写星期名
%b    缩写月名
%c    月,数值
%D    带有英文前缀的月中的天
%d    月的天,数值(00-31)
%e    月的天,数值(0-31)
%f    微秒
%H    小时 (00-23)
%h    小时 (01-12)
%I    小时 (01-12)
%i    分钟,数值(00-59)
%j    年的天 (001-366)
%k    小时 (0-23)
%l    小时 (1-12)
%M    月名
%m    月,数值(00-12)
%p    AM 或 PM
%r    时间,12-小时(hh:mm:ss AM 或 PM)
%S    秒(00-59)
%s    秒(00-59)
%T    时间, 24-小时 (hh:mm:ss)
%U    周 (00-53) 星期日是一周的第一天
%u    周 (00-53) 星期一是一周的第一天
%V    周 (01-53) 星期日是一周的第一天,与 %X 使用
%v    周 (01-53) 星期一是一周的第一天,与 %x 使用
%W    星期名
%w    周的天 (0=星期日, 6=星期六)
%X    年,其中的星期日是周的第一天,4 位,与 %V 使用
%x    年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y    年,4 位
%y    年,2 位

4|2操作演示

   Date_format(字段,格式化内容)或者TIME_FORMAT(字段,格式化内容)用于格式化时间

   注意:TIME_FORMAT()只包含时分秒,并不包含年月日

   以下示例将创建一张temp表,并拥有时间类型字段ct,对他进行查询格式化操作。

mysql>

5 常用函数

5|1获取时间

   获取当前完整时间可使用函数now()

   只获取部分时间可使用部分时间的函数对其进行包裹

mysql>

   其他可以使用的函数如下

函数              说明
不需要包裹     
NOW()             当前时间,完整的年月日时分秒
CURRENT_DATE()    当前日期,年月日
CURRENT_TIME()    当前时间,时分秒

需要包裹     
YEAR()          年(范围从1000 到 9999)
MONTH()         月(范围从1到12)
DAY()           日(范围从1开始)
HOUR()          时(范围从0到23)
MINUTE()        分(范围从0到59)
SECOND()        秒(范围从0到59)
TIME()          只获取时间,即时分秒。
WEEK()          一年中的第几周,从1开始计数
QUARTER()       一年中的季度,从1开始计数
DAYOFYEAR()     一年中的第几天(从1开始)
DAYOFMONTH()    月份中天数(从1开始)
DAYOFWEEK()     星期天(1)到星期六(7)
WEEKDAY()       星期一(0)到星期天(6)
TO_DAYS()       从元年到现在的天数(忽略时间部分)
FROM_DAYS()     根据天数得到日期(忽略时间部分)
TIME_TO_SEC()    时间转为秒数(忽略日期部分)
SEC_TO_TIME()    根据秒数转为时间(忽略日期部分)
UNIX_TIMESTAMP() 根据日期返回秒数(包括日期与时间)
FROM_UNIXTIME()  根据秒数返回日期与时间(包括日期与时间)
DATEDIFF()       两个日期相差的天数(忽略时间部分,前面日期减后面日期)
TIMEDIFF()       计算两个时间的间隔(忽略日期部分)
TIMESTAMPDIFF()  根据指定单位计算两个日期时间的间隔(包括日期与时间)
LAST_DAY()       该月的最后一天

5|2时间拆分

   以下示例将展示将某一时间拆分成不同的部分

mysql>

5|3当前时间

   以下示例将展示如何获取当前时间

mysql>

5|4时间计算

   以下示例将展示计算出当前时间位于一年中的第几周,季度,第几天。

mysql>

5|5时间转换

   以下示例将展示如何进行不包含日期的秒转换

mysql>

   以下示例将展示如何进行日期时间与秒转换

mysql>

   以下示例将展示如何进行日期时间与天数转换

mysql>

5|6差值计算

   以下示例将展示如何进行计算天数差值,忽略时间部分

mysql>

   以下示例将展示如何进行计算时间差值,忽略天数

mysql>

5|7差值单位

   使用timestampdiff()可指定差值单位,支持的单位有 YEAR/MONTH/WEEK/DAY/HOUR/MINUTE/SECOND等

   注意,这个是后面减前面

mysql>

6 时间计算

函数        说明
ADDTIME     添加时间(负数为减少),只对时间有效
TIMESTAMP   添加时间(负数为减少),只对时间有效
DATE_ADD    根据单位添加时间,支持单位有YEAR/MONTH/DAY/HOUR/MINUTE/SECOND/HOUR_MINUTE/DAY_HOUR/DAY_MINUTE/DAY_SECOND/HOUR_MINUTE/HOUR_SECOND(负数时等于DATE_SUB)
DATE_SUB    DATE_ADD的反函数
LAST_DAY    指定月最后一天日期

   七小时前的时间

mysql>

   七天后的日期

mysql>

   20小时10分钟后的日期

mysql>

   2天8小时后的日期

mysql>

   获取本月最后一天日期

mysql>

   获取本月的第一天日期

mysql>

7 查询使用

   MySQL内部将日期按数值进行处理,下面是查找'1990-02-22 09:00:00' 日期可以写成数值形式

SELECT * FROM users WHERE birthday  = 19900222090000

   当然也可以写成字符串格式,查找在 1990~1999年出生的同学

SELECT * FROM stu WHERE birthday BETWEEN '1990-01-01' AND '1999-12-31';