• mysql 时间类型精确到毫秒、微秒及其处理


    一、MySQL 获得毫秒、微秒及对毫秒、微秒的处理

    MySQL 较新的版本中(MySQL 6.0.5),也还没有产生微秒的函数,now() 只能精确到秒。 MySQL 中也没有存储带有毫秒、微秒的日期时间类型。

    但,奇怪的是 MySQL 已经有抽取(extract)微秒的函数。例如:

    select microsecond('12:00:00.123456');                          -- 123456
    select microsecond('1997-12-31 23:59:59.000010');               -- 10
    
    select extract(microsecond from '12:00:00.123456');             -- 123456
    select extract(microsecond from '1997-12-31 23:59:59.000010');  -- 10
    
    select date_format('1997-12-31 23:59:59.000010', '%f');         -- 000010
    

    尽管如此,想在 MySQL 获得毫秒、微秒还是要在应用层程序中想办法。假如在应用程序中获得包含微秒的时间:1997-12-31 23:59:59.000010,在 MySQL 存放时,可以设计两个字段:c1 datetime, c2 mediumint,分别存放日期和微秒。为什么不采用 char 来存储呢?用 char 类型需要 26 bytes,而 datetime + mediumint 只有 11(8+3) 字节。

    ---转自网友:mlxia

    地址:http://mlxia.iteye.com/blog/278982

     

    二、MYSQL的毫秒级时间比较

    一般来说,MYSQL使用时间比较一般是转换成时间格式来比较,如:

    DATE_FORMAT('年-月-日 时:分:秒','%Y-%m-%d %h:%i:%s')

    select DATE_FORMAT('2010-12-01 07:03:16','%Y-%m-%d %h:%i:%s')/*具体例子*/

    如果要转换成毫秒级就要用 select DATE_FORMAT('2010-12-01 07:03:16.233','%Y-%m-%d %T:%f')-- 注意啦,T不能小写

    一个查询的实例:

    select * from test where DATE_FORMAT(timess,'%Y-%m-%d %T:%f') between DATE_FORMAT('2010-12-01 06:03:16.233','%Y-%m-%d %T:%f') and DATE_FORMAT('2010-12-01 08:03:16.733','%Y-%m-%d %T:%f')

    在这里,要转换的字符串的毫秒前是用“.”表示小数位的。

    除此以外,还有一种可以直接拿字符串比较的:

    select * from test where DATE_FORMAT(timess,'%Y-%m-%d %T:%f') between '2010-12-01 06:03:16:233' and '2010-12-01 08:03:16:733'

    这样也可以。但是要注意这里的毫秒前的符号变成了":",必须是这个符号,如果你写成了“.”查询结果是错误的。 

    其实这2中写法都可以,不过,我还是建议最好用DATE_FORMA()函数转换的写法,因为在使用Navicat Lite这样的工具调试的时候,如果是直接比较字符串,有时候会报错。具体原因不明。

    最后,还是要跟大家说一声:在用格式转换的时候,还是要分清大小写,因为很多人在这个上面不注意,结果导致调试失败。就如同上面的这个例子。不能用小写的t的格式,还是要用大写的T,否则结果会错误。

  • 相关阅读:
    2012第50周星期日
    2012第51周星期一
    2012第51周星期三
    2012第51周六
    2012第52周一
    2012第51周五冬至
    2012第51周星期二
    2012第52周二
    2012年第51周日
    2012第51周星期四
  • 原文地址:https://www.cnblogs.com/interdrp/p/9148719.html
Copyright © 2020-2023  润新知