TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)
專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、做網(wǎng)站服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)運河免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
返回日期或日期時間表達式datetime_expr1 和datetime_expr2the 之間的整數(shù)差。
其結(jié)果的單位由interval 參數(shù)給出。該參數(shù)必須是以下值的其中一個:
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)
經(jīng)常有人問及:在 MySQL 中如何獲得毫秒?于是就寫篇日志總結(jié)下。
MySQL 較新的版本中(MySQL 6.0.5),也還沒有產(chǎn)生微秒的函數(shù),now() 只能精確到秒。 MySQL 中也沒有存儲帶有毫秒、微秒的日期時間類型。
但,奇怪的是 MySQL 已經(jīng)有抽?。╡xtract)微秒的函數(shù)。例如:
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 獲得毫秒、微秒還是要在應(yīng)用層程序中想辦法。假如在應(yīng)用程序中獲得包含微秒的時間:1997-12-31 23:59:59.000010,在 MySQL 存放時,可以設(shè)計兩個字段:c1 datetime, c2 mediumint,分別存放日期和微秒。為什么不采用 char 來存儲呢?用 char 類型需要 26 bytes,而 datetime + mediumint 只有 11(8+3) 字節(jié)。
毫秒、微秒名詞解釋:
毫秒:millisecond -- 千分之一秒
微秒:microsecond -- 一百萬分之一秒
1 秒 = 1000 毫秒;1 毫秒 = 1000 微秒
有相當一部分剛接觸到
MySQL
的朋友都遇到這樣一個相同的問題,就是關(guān)于毫秒的存儲與顯示。由于MySQL數(shù)據(jù)類型中只提供了DATETIME,
TIMESTAMP,
TIME,
DATE,
YEAR這幾種時間類型,而且DATETIME
以及
TIMESTAMP
的最小單位是秒,沒有存儲毫秒級別的函數(shù)。
不過MySQL卻能識別時間中的毫秒部分。而且我們有多種方式可以獲得毫秒的部分,比如函數(shù):microsecond
等。
我這里舉一個簡單的例子,來存儲秒之前和之后的部分。
對于把時間字段作為主鍵的應(yīng)用,我們可以建立以下的表來作相應(yīng)的轉(zhuǎn)化:
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來保證性能!
方法很多,就看你的應(yīng)用怎么用合理了。