Mysql unix_timestamp() FROM_UNIXTIME和DATE_FORMAT(date,format)

时间:2022-07-14 19:52:59

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