写给自己

有一些情况需要考虑时间和字符串的转换工作,MySQL提供了一些内置函数可以很方便的相互转换。试一下吧

创作时间

81213 21:55:00

作者

gaox

正文

MySQL时间格式

%Y:代表4位的年份
%y:代表2为的年份

%m:代表月, 格式为(01……12)
%c:代表月, 格式为(1……12)

%d:代表月份中的天数,格式为(00……31)
%e:代表月份中的天数, 格式为(0……31)

%H:代表小时,格式为(00……23)
%k:代表 小时,格式为(0……23)
%h: 代表小时,格式为(01……12)
%I: 代表小时,格式为(01……12)
%l :代表小时,格式为(1……12)

%i: 代表分钟, 格式为(00……59)

%S:代表 秒,格式为(00……59)
%s:代表 秒,格式为(00……59)

%r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)
%T:代表 时间,格式为24 小时(hh:mm:ss)

使用的函数:DATE_FORMAT(date,format) date:需要转换的日期 format:格式化的样式

format样式整理:


  1. %Y 显示四位 : 2015 %y 只显示后两位 :15


  2. %M 月份的英文显示:October %m 月份的阿拉伯显示:01-12
    %b 月份的英文缩略显示:Oct %c 月份的阿拉伯显示:1-12


  3. %d 阿拉伯显示:00-31 %D 带有英文后缀:1st-31th
    %e 阿拉伯显示:1-31 %j 年的天:001-366


  4. %H :00-23 %h:01-12 %I:01-12 %k:0-23 %l:1-12


  5. 分: %i:00-59


  6. %S:00-59 %s:00-59

  7. 毫秒
    微妙: %f 777


  8. %W:周的英文显示 %w 周的阿拉伯显示 :0(星期日)-6(星期六)
    %a 周的英文缩略显示:Mon-

  9. 时间
    AM/PM:%p
    12小时制时间:%r: 02:02:44 PM
    24小时制时间: %T: 14:02:44

转换

注意间隔符可以使 空格、,、.、-、: 等,必须对照使用。

str_2_date

SELECT str_to_date('2015-01-02','%Y-%m-%d')
2015-01-02

date_2_str

SELECT DATE_FORMAT(now(),"%Y-%m-%d %H:%i:%s %p")

大批量时间比较使用UNIX时间戳比较

当系统需要非常大量的时间比较时可以使用Unix时间戳的方式进行比较,我们分析MySQL源码可知,MySQL时间类型的存储方式是将日期和时间分别存储(8字节),而不如时间戳整形变量(4字节)比较的效率高,所以推荐使用Unix时间戳方式进行比较运算。

获取时间戳

SELECT UNIX_TIMESTAMP('2010-03-01 00:00:30')

从时间戳获得时间

SELECT FROM_UNIXTIME(1267401630)

结束语