mysql 時間類型精確到毫秒、微秒及其處理


一、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) 字節。

---轉自網友:mlxia

地址:http://mlxia.iteye.com/blog/278982

 

二、MYSQL的毫秒級時間比較

一般來說,MYSQL使用時間比較一般是轉換成時間格式來比較,如:

DATE_FORMAT('年-月-日 時:分:秒','%Y-%m-%d %h:%i:%s')

select DATE_FORMAT('2010-12-01 07:03:16','%Y-%m-%d %h:%i:%s')/*具體例子*/

如果要轉換成毫秒級就要用 select DATE_FORMAT('2010-12-01 07:03:16.233','%Y-%m-%d %T:%f')-- 注意啦,T不能小寫

一個查詢的實例:

select * from test where DATE_FORMAT(timess,'%Y-%m-%d %T:%f') between DATE_FORMAT('2010-12-01 06:03:16.233','%Y-%m-%d %T:%f') and DATE_FORMAT('2010-12-01 08:03:16.733','%Y-%m-%d %T:%f')

在這里,要轉換的字符串的毫秒前是用“.”表示小數位的。

除此以外,還有一種可以直接拿字符串比較的:

select * from test where DATE_FORMAT(timess,'%Y-%m-%d %T:%f') between '2010-12-01 06:03:16:233' and '2010-12-01 08:03:16:733'

這樣也可以。但是要注意這里的毫秒前的符號變成了":",必須是這個符號,如果你寫成了“.”查詢結果是錯誤的。 

其實這2中寫法都可以,不過,我還是建議最好用DATE_FORMA()函數轉換的寫法,因為在使用Navicat Lite這樣的工具調試的時候,如果是直接比較字符串,有時候會報錯。具體原因不明。

最后,還是要跟大家說一聲:在用格式轉換的時候,還是要分清大小寫,因為很多人在這個上面不注意,結果導致調試失敗。就如同上面的這個例子。不能用小寫的t的格式,還是要用大寫的T,否則結果會錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM