MySQL是一種流行的關系型數據庫管理系統。MySQL5.7.9版本是MySQL5.7系列最新的版本,與近期的5.7版本相比,5.7.9有很多的改進和更新,其中的時間函數也得到了一些新增和修改。
時區的處理一直是MySQL時間函數中比較重要的一個問題,MySQL5.7.9也針對時區問題進行了改進。使用MySQL 5.7.9版本加入以及更新時間 Time zone description 數據庫,用來提供更為精確的時區信息。
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p
這可以將時間函數和時區信息掛鉤,并且讓多個時區的用戶也可以共享統一的時間信息,大大提高MySQL的時間準確性和可靠性。
在5.7.9版本中的新增函數有:
- ADDTIME(time1, time2): 用于將兩個時間相加并返回一個時間值,其中time1和time2的格式必須為'hh:mm:ss'或'hh:mm:ss.ssssss'。
- SUBTIME(time1, time2): 用于將一個時間值time1減去另一個時間值time2后返回結果,其中time1和time2必須具有相同的格式。
- TIMEFROMPARTS(hour, minute, second, microsecond): 根據指定的小時、分鐘、秒和微秒創建一個時間值,其中hour的值范圍為0到23,minute和second的值范圍為0到59,microsecond的值范圍為0到999999。
- TIMESTAMPADD(unit, interval, datetime_expr): 用于將指定的時間間隔(interval)添加到指定的日期或時間表達式(datetime_expr)中。unit可以選用YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND或MICROSECOND。
- TIMESTAMPDIFF(unit, timestamp1, timestamp2): 用于計算兩個日期或時間之間的差,unit可以選用YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND或MICROSECOND。
SELECT ADDTIME('12:30:00.123456', '00:30:59.123456'); -- 13:00:59.246912 SELECT SUBTIME('12:30:00.123456', '00:30:59.123456'); -- 12:59:01.000000 SELECT TIMEFROMPARTS(10,30,45,123456); -- 10:30:45.123456 SELECT TIMESTAMPADD(WEEK,5,'2016-10-01'); -- 2016-11-05 SELECT TIMESTAMPDIFF(DAY,'2017-10-01 00:00:00','2017-10-31 23:59:59'); -- 30
除了新增函數外,還有一些函數進行了修改和增強,比如TIME函數現在支持至6位微秒(之前僅支持到秒),UNIX_TIMESTAMP函數現在返回自epoch以來的微秒數。這些更新和改進讓MySQL5.7.9在時間函數上表現出更加優秀的性能和可靠性。