7.日期格式化

mysql中日期格式化也是分两个方面,一是在建表时就确定字段信息,二是在查询数据时进行日期时间格式化

   

一、MySQL DATE_FORMAT() 函数

MySQL日期格式化使用MySQL DATE_FORMAT() 函数

定义和用法 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。

语法

DATE_FORMAT(date,format)

date 参数是合法的日期。format 规定日期/时间的输出格式。

可以使用的格式有:

格式

描述

%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 位

实例

下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式。我们使用 NOW() 来获得当前的日期/时间:

DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
DATE_FORMAT(NOW(),'%m-%d-%Y')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')

结果类似:

Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635

   

二、MySQL Date 函数

当我们处理日期时,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配。

只要数据包含的只是日期部分,运行查询就不会出问题。但是,如果涉及时间,情况就有点复杂了。

在讨论日期查询的复杂性之前,我们先来看看最重要的内建日期处理函数。

下面的表格列出了 MySQL 中最重要的内建日期函数:

函数

描述

NOW()

返回当前的日期和时间

CURDATE()

返回当前的日期

CURTIME()

返回当前的时间

DATE()

提取日期或日期/时间表达式的日期部分

EXTRACT()

返回日期/时间按的单独部分

DATE_ADD()

给日期添加指定的时间间隔

DATE_SUB()

从日期减去指定的时间间隔

DATEDIFF()

返回两个日期之间的天数

DATE_FORMAT()

用不同的格式显示日期/时间

   

三、MySQL 格式化函数 FROM_UNIXTIME()

SELECT FROM_UNIXTIME(date, '%Y-%c-%d %h:%i:%s' ) as post_date ,
date_format(NOW(), '%Y-%c-%d %h:%i:%s' ) as post_date_gmt
FROM `article` where outkey = 'Y'

1FROM_UNIXTIME( unix_timestamp ) 

参数:一般为10位的时间戳,如:1417363200 

返回值:有两种,可能是类似 'YYYY-MM-DD HH:MM:SS' 这样的字符串,也有可能是类似于 YYYYMMDDHHMMSS.uuuuuu 这样的数字,具体返回什么取决于该函数被调用的形式。

mysql> select FROM_UNIXTIME(1344887103);
+---------------------------+
| FROM_UNIXTIME(1344887103) |
+---------------------------+
| 2012-08-14 03:45:03 |
+---------------------------+
1 row in set (0.00 sec)

   

三、Mysql 建表时,日期时间类型选择

mysql(5.5)所支持的日期时间类型有:DATETIME、 TIMESTAMPDATETIMEYEAR

几种类型比较如下:

日期时间类型

占用空间

日期格式

最小值

最大值

零值表示

 DATETIME

 8 bytes

 YYYY-MM-DD HH:MM:SS

 1000-01-01 00:00:00

9999-12-31 23:59:59 

0000-00-00 00:00:00

 TIMESTAMP

 4 bytes

 YYYY-MM-DD HH:MM:SS

 19700101080001

2038 年的某个时刻

00000000000000

 DATE

 4 bytes

 YYYY-MM-DD

1000-01-01 

9999-12-31 

0000-00-00

 TIME

 3 bytes

 HH:MM:SS

 -838:59:59

838:59:59 

00:00:00

 YEAR

 1 bytes

 YYYY

1901 

2155 

0000

  DATETIME

     DATETIME 用于表示 年月日 时分秒,是 DATE TIME 的组合,并且记录的年份(见上表)比较长久。如果实际应用中有这样的需求,就可以使用 DATETIME 类型。

 TIMESTAMP

     如果记录的日期需要让不同时区的人使用,最好使用 TIMESTAMP

 DATE

    DATE 用于表示 年月日,如果实际应用值需要保存 年月日 就可以使用 DATE

 TIME

    TIME 用于表示 时分秒,如果实际应用值需要保存 时分秒 就可以使用 TIME

 YEAR

    YEAR 用于表示 年份,YEAR 2 位(最好使用4位)和 4 位格式的年。 默认是4位。如果实际应用只保存年份,那么用 1 bytes 保存 YEAR 类型完全可以。不但能够节约存储空间,还能提高表的操作效率。 

每种日期时间类型都有一个有效值范围,如果超出这个范围,在默认的SQLMode下会报错,并以零值(见上表)存储。

插入或更新时,日期时间类型允许"不严格"语法,以DATETIME为例(其他日期时间类型雷同):

   

   

   

posted @ 2018-03-02 16:11  outback123  阅读(728)  评论(0编辑  收藏  举报