mysql 時間型別精確到毫秒、微秒及其處理
阿新 • • 發佈:2018-12-29
一、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,否則結果會錯誤。