zoukankan      html  css  js  c++  java
  • Mysql unix_timestamp() FROM_UNIXTIME和DATE_FORMAT(date,format)

    mysql 中:UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

      若无参数调用,则返回一个 Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒数) 作为无符号整数。若用date 来调用 UNIX_TIMESTAMP(),它会将参数值以'1970-01-01 00:00:00' GMT后的秒数的形式返回。date 可以是一个 DATE 字符串、一个 DATETIME字符串、一个 TIMESTAMP或一个当地时间的YYMMDD 或YYYMMDD格式的数字。

      mysql> Select UNIX_TIMESTAMP();

      -> 882226357

      mysql> Select UNIX_TIMESTAMP('1997-10-04 22:23:00');

      -> 875996580

      当 UNIX_TIMESTAMP 被用在 TIMESTAMP列时, 函数直接返回内部时戳值, 而不进行任何隐含的 “string-to-Unix-timestamp”转化。假如你向UNIX_TIMESTAMP()传递一个溢出日期,它会返回 0,但请注意只有基本范围检查会被履行 (年份从1970 到 2037, 月份从01 到12,日期从 01 到31)。

      这里我们可以使用

      FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format) 来格式化一个UNIX_TIMESTAMP()时间戳,它将返回'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS 格式值的 unix_timestamp参数表示,具体格式取决于该函数是否用在字符串中或是数字语境中。

      若format 已经给出,则结果的格式是根据format 字符串而定。 format 可以包含同DATE_FORMAT() 函数输入项列表中相同的说明符。(不同时date_format参数是日期,from_unixtime参数是时间戳)

      mysql> Select FROM_UNIXTIME(875996580);

      -> '1997-10-04 22:23:00'

      mysql> Select FROM_UNIXTIME(875996580) + 0;

      -> 19971004222300

      mysql> Select FROM_UNIXTIME(UNIX_TIMESTAMP(),

      -> '%Y %D %M %h:%i:%s %x');

      -> '2003 6th August 06:22:58 2003'

     FROM_UNIXTIME(p.created_date,'%Y-%m-%d') 输出:2013-09-24。

    如果改成'%Y-%M-%d',则输出英文的2013-September-24。

     php中:time()

      time -- 返回当前的 Unix 时间戳

      返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。

      从字面上理解他们是一样的,都是返回 自从 Unix 纪元到当前时间的秒数。

      笔者在同一台服务器上做了一个测试,发现两者返回的结果是一样的 。

      在mysql中用 FROM_UNIXTIME( 1156219870 ,'%Y-%m-%d' ) %y为后两位,%Y为4位。

      和php中用date( "y-m-d",1156219870 )结果也是一样相同的!唯一不肯确定的是那一个反应更加快速。不过我还是倾向与用php中的time()函数!

    date_format(  a.createtime  , '%Y-%m-%d %H:%i:%s') 

    2016-01-30 17:42:20

    实例

    下面的脚本使用 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

    参考:

    http://www.yanghengfei.com/archives/514/

    http://www.w3school.com.cn/sql/func_date_format.asp

    lpad函数:

    lpad函数是Oracle数据库函数,lpad函数从左边对字符串使用指定的字符进行填充。从其字面意思也可以理解,l是left的简写,pad是填充的意思,所以lpad就是从左边填充的意思。

    lpad( string, padded_length, [ pad_string ] )

    TIMESTAMPDIFF

    在应用时,经常要使用这两个函数TIMESTAMPDIFF和TIMESTAMPADD。
     
    一,TIMESTAMPDIFF
    语法:
    TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)。
     
    说明:
     
    返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其结果的单位由interval 参数给出。该参数必须是以下值的其中一个:
     
    FRAC_SECOND。表示间隔是毫秒
    SECOND。秒
    MINUTE。分钟
    HOUR。小时
    DAY。天
    WEEK。星期
    MONTH。月
    QUARTER。季度
    YEAR。年
     
    使用如下:
    [sql] 
    mysql> select TIMESTAMPDIFF(day,'2012-08-24','2012-08-30');  
    +----------------------------------------------+  
    | TIMESTAMPDIFF(day,'2012-08-24','2012-08-30') |  
    +----------------------------------------------+  
    |                                            6 |   
    +----------------------------------------------+  
    1 row in set (0.00 sec)  
      www.2cto.com  
    [sql] 
    mysql> select TIMESTAMPDIFF(MINUTE,'2012-08-24 09:00:00','2012-08-30 12:00:00');  
    +-------------------------------------------------------------------+  
    | TIMESTAMPDIFF(MINUTE,'2012-08-24 09:00:00','2012-08-30 12:00:00') |  
    +-------------------------------------------------------------------+  
    |                                                              8820 |   
    +-------------------------------------------------------------------+  
    1 row in set (0.01 sec)  
     
    [sql] 
    mysql> select TIMESTAMPDIFF(day,'2012-08-24','2012-08-30');  
    +----------------------------------------------+  
    | TIMESTAMPDIFF(day,'2012-08-24','2012-08-30') |  
    +----------------------------------------------+  
    |                                            6 |   
    +----------------------------------------------+  
     
    二,TIMESTAMPADD
    语法:
    TIMESTAMPADD(interval,int_expr,datetime_expr)
      www.2cto.com  
    说明:
    将整型表达式int_expr 添加到日期或日期时间表达式 datetime_expr中。式中的interval和上文中列举的取值是一样的。
     
    [sql] 
    mysql> select TIMESTAMPADD(MINUTE,8820,'2012-08-24 09:00:00');  
    +-------------------------------------------------+  
    | TIMESTAMPADD(MINUTE,8820,'2012-08-24 09:00:00') |  
    +-------------------------------------------------+  
    | 2012-08-30 12:00:00                             |   
    +-------------------------------------------------+  
    1 row in set (0.00 sec)  
    mysql求开始日期到现在的天数:
    TIMESTAMPDIFF(DAY,p.created_date,NOW()) as created_days,
     
     
     
    获得当前日期(date)函数:curdate()

    mysql> select curdate();

    +------------+
    | curdate() |
    +------------+
    | 2008-08-08 |
    +------------+
    其中,下面的两个日期函数等同于 curdate():

    current_date()
    ,current_date
    select CURDATE()-1
    原本为:2014-10-14变成了:20141013
     

    二、MySQL 日期时间 Extract(选取) 函数。 
    1. 选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒

    set @dt = '2008-09-10 07:15:30.123456';

    select date(@dt);        -- 2008-09-10  很方便的函数不要时分秒
    select time(@dt);        -- 07:15:30.123456  (select time("2014-10-18 23:45:15") 输出:  23:45:15 )
    select year(@dt);        -- 2008 
    select quarter(@dt);     -- 3 
    select month(@dt);       -- 9 
    select week(@dt);        -- 36 
    select day(@dt);         -- 10 
    select hour(@dt);        -- 7 
    select minute(@dt);      -- 15 
    select second(@dt);      -- 30 
    select microsecond(@dt); -- 123456

    2. MySQL Extract() 函数,可以上面实现类似的功能:

    set @dt = '2008-09-10 07:15:30.123456';

    select extract(year                from @dt); -- 2008 
    select extract(quarter             from @dt); -- 3 
    select extract(month               from @dt); -- 9 
    select extract(week                from @dt); -- 36 
    select extract(day                 from @dt); -- 10 
    select extract(hour                from @dt); -- 7 
    select extract(minute              from @dt); -- 15 
    select extract(second              from @dt); -- 30 
    select extract(microsecond         from @dt); -- 123456

    select extract(year_month          from @dt); -- 200809 
    select extract(day_hour            from @dt); -- 1007 
    select extract(day_minute          from @dt); -- 100715 
    select extract(day_second          from @dt); -- 10071530 
    select extract(day_microsecond     from @dt); -- 10071530123456 
    select extract(hour_minute         from @dt); --    715 
    select extract(hour_second         from @dt); --    71530 
    select extract(hour_microsecond    from @dt); --    71530123456 
    select extract(minute_second       from @dt); --      1530 
    select extract(minute_microsecond from @dt); --      1530123456 
    select extract(second_microsecond from @dt); --        30123456

    MySQL Extract() 函数除了没有date(),time() 的功能外,其他功能一应具全。并且还具有选取‘day_microsecond' 等功能。注意这里不是只选取 day 和 microsecond,而是从日期的 day 部分一直选取到 microsecond 部分。够强悍的吧!

    MySQL Extract() 函数唯一不好的地方在于:你需要多敲几次键盘。

    三、MySQL 日期时间计算函数 
    1. MySQL 为日期增加一个时间间隔:date_add()

    set @dt = now();

    select date_add(@dt, interval 1 day);        -- add 1 day 
    select date_add(@dt, interval 1 hour);       -- add 1 hour 
    select date_add(@dt, interval 1 minute);     -- ... 
    select date_add(@dt, interval 1 second); 
    select date_add(@dt, interval 1 microsecond); 
    select date_add(@dt, interval 1 week); 
    select date_add(@dt, interval 1 month); 
    select date_add(@dt, interval 1 quarter); 
    select date_add(@dt, interval 1 year);

    select date_add(@dt, interval -1 day);       -- sub 1 day

    MySQL adddate(), addtime()函数,可以用 date_add() 来替代。下面是 date_add() 实现 addtime() 功能示例:

    mysql> set @dt = '2008-08-09 12:12:33';

    mysql> 
    mysql> select date_add(@dt, interval '01:15:30' hour_second);

    +------------------------------------------------+ 
    | date_add(@dt, interval '01:15:30' hour_second) | 
    +------------------------------------------------+ 
    | 2008-08-09 13:28:03                            | 
    +------------------------------------------------+

    mysql> select date_add(@dt, interval '1 01:15:30' day_second);

    +-------------------------------------------------+ 
    | date_add(@dt, interval '1 01:15:30' day_second) | 
    +-------------------------------------------------+ 
    | 2008-08-10 13:28:03                             | 
    +-------------------------------------------------+

    date_add() 函数,分别为 @dt 增加了“1小时 15分 30秒” 和 “1天 1小时 15分 30秒”。建议:总是使用 date_add() 日期时间函数来替代 adddate(), addtime()。

    2. MySQL 为日期减去一个时间间隔:date_sub()

    mysql> select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second);

    +----------------------------------------------------------------+ 
    | date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second) | 
    +----------------------------------------------------------------+ 
    | 1997-12-30 22:58:59                                            | 
    +----------------------------------------------------------------+

    MySQL date_sub() 日期时间函数 和 date_add() 用法一致,不再赘述。另外,MySQL 中还有两个函数 subdate(), subtime(),建议,用 date_sub() 来替代。

    3. MySQL 另类日期函数:period_add(P,N), period_diff(P1,P2)

    函数参数“P” 的格式为“YYYYMM” 或者 “YYMM”,第二个参数“N” 表示增加或减去 N month(月)。

    MySQL period_add(P,N):日期加/减去N月。

    mysql> select period_add(200808,2), period_add(20080808,-2)

    +----------------------+-------------------------+ 
    | period_add(200808,2) | period_add(20080808,-2) | 
    +----------------------+-------------------------+ 
    |               200810 |                20080806 | 
    +----------------------+-------------------------+

    MySQL period_diff(P1,P2):日期 P1-P2,返回 N 个月。

    mysql> select period_diff(200808, 200801);

    +-----------------------------+ 
    | period_diff(200808, 200801) | 
    +-----------------------------+ 
    |                           7 | 
    +-----------------------------+

    在 MySQL 中,这两个日期函数,一般情况下很少用到。

    4. MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)

    MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数。

    select datediff('2008-08-08', '2008-08-01'); -- 7 
    select datediff('2008-08-01', '2008-08-08'); -- -7

    MySQL timediff(time1,time2):两个日期相减 time1 - time2,返回 time 差值。

    select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); -- 08:08:08 
    select timediff('08:08:08', '00:00:00');                       -- 08:08:08

    注意:timediff(time1,time2) 函数的两个参数类型必须相同。

    参考:http://www.jb51.net/article/23966.htm

     
  • 相关阅读:
    PhpStorm一次性折叠所有函数或者方法
    安装IntelliJ IDEA热部署tomcat插件JreBel
    mysql-master-ha
    mysql sys table
    Innodb 表修复(转)
    MySQL Binlog 【ROW】和【STATEMENT】选择(转)
    Innodb 存储引擎(转)
    MySQL 利用SQL线程对Binlog操作(转)
    针对跑MySQL的Linux优化【转】
    MySQL explain key_len 大小的计算
  • 原文地址:https://www.cnblogs.com/youxin/p/3544354.html
Copyright © 2011-2022 走看看