十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)
专注于为中小企业提供成都网站建设、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业运河免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了超过千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。
其结果的单位由interval 参数给出。该参数必须是以下值的其中一个:
FRAC_SECOND 表示间隔是毫秒
SECOND 秒
MINUTE 分钟
HOUR 小时
DAY 天
WEEK 星期
MONTH 月
QUARTER 季度
YEAR 年
mysql SELECT TIMESTAMPDIFF(SECOND, '2012-12-21', CURRENT_TIMESTAMP()) AS `Second`;
+----------+
| Second |
+----------+
| 53880812 |
+----------+
1 row in set (0.00 sec)
经常有人问及:在 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) 字节。
毫秒、微秒名词解释:
毫秒:millisecond -- 千分之一秒
微秒:microsecond -- 一百万分之一秒
1 秒 = 1000 毫秒;1 毫秒 = 1000 微秒
有相当一部分刚接触到
MySQL
的朋友都遇到这样一个相同的问题,就是关于毫秒的存储与显示。由于MySQL数据类型中只提供了DATETIME,
TIMESTAMP,
TIME,
DATE,
YEAR这几种时间类型,而且DATETIME
以及
TIMESTAMP
的最小单位是秒,没有存储毫秒级别的函数。
不过MySQL却能识别时间中的毫秒部分。而且我们有多种方式可以获得毫秒的部分,比如函数:microsecond
等。
我这里举一个简单的例子,来存储秒之前和之后的部分。
对于把时间字段作为主键的应用,我们可以建立以下的表来作相应的转化:
mysql
create
table
mysql_microsecond
(
log_time_prefix
timestamp
not
null
default
0,
log_time_suffix
mediumint
not
null
default
0)
engine
innnodb;
Query
OK,
rows
affected,
2
warnings
(0.00
sec)
mysql
alter
table
mysql_microsecond
add
primary
key
(log_time_prefix,
log_time_suffix);
Query
OK,
rows
affected
(0.01
sec)
Records:
Duplicates:
Warnings:
mysql
set
@a
=
convert(concat(now(),'.222009'),datetime);
Query
OK,
rows
affected
(0.00
sec)
mysql
insert
into
mysql_microsecond
select
date_format(@a,'%Y-%m-%d
%H-%i-%s'),date_format(@a,'%f');
Query
OK,
1
row
affected
(0.00
sec)
Records:
1
Duplicates:
Warnings:
mysql
select
*
from
mysql_microsecond;
+---------------------+-----------------+
|
log_time_prefix
|
log_time_suffix
|
+---------------------+-----------------+
|
2009-08-11
17:47:02
|
222009
|
+---------------------+-----------------+
1
row
in
set
(0.00
sec)
或者是用VARCHAR来存储所有的时间字段,
又或者是存储一个HASH来保证性能!
方法很多,就看你的应用怎么用合理了。