您的位置:首页 > 数据库 > MySQL

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

2014-02-11 14:37 423 查看
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,

mysql时间函数:http://www.myexception.cn/mysql/632099.html

获得当前日期(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) 函数的两个参数类型必须相同。

参考:/article/1242043.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: