SQLite中的時間日期函數sql
這是我學習SQLite時作的筆記,參考並翻譯了Chris Newman寫的《SQLite》中的《Working with Dates and Times》一文中的部份內容。函數
SQLite包含了以下時間/日期函數:
datetime().......................產生日期和時間
date()...........................產生日期
time()...........................產生時間
strftime().......................對以上三個函數產生的日期和時間進行格式化學習
datetime()的用法是:datetime(日期/時間,修正符,修正符...)
date()和time()的語法與datetime()相同。測試
在時間/日期函數裏能夠使用以下格式的字符串做爲參數:
YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
其中now是產生如今的時間。翻譯
舉例(寫這個筆記的時間是2006年10月17日晚8點到10點,測試環境:SQLite 2.8.17,WinXP,北京時間):sqlite
例1.
select datetime('now');
結果:2006-10-17 12:55:54字符串
例2.
select datetime('2006-10-17');
結果:2006-10-17 12:00:00it
例3.
select datetime('2006-10-17 00:20:00','+1 hour','-12 minute');
結果:2006-10-17 01:08:00基礎
例4.
select date('2006-10-17','+1 day','+1 year');
結果:2007-10-18date
例5.
select datetime('now','start of year');
結果:2006-01-01 00:00:00
例6.
select datetime('now','start of month');
結果:2006-10-01 00:00:00
例7.
select datetime('now','start of day');
結果:2006-10-17 00:00:00
例8.
select datetime('now','+10 hour','start of day','+10 hour');
結果:2006-10-17 10:00:00
例9.
select datetime('now','localtime');
結果:2006-10-17 21:21:47
例10.
select datetime('now','+8 hour');
結果:2006-10-17 21:24:45
例3中的+1 hour和-12 minute表示能夠在基本時間上(datetime函數的第一個參數)增長或減小必定時間。
例5中的start of year表示一年開始的時間。
從例8能夠看出,儘管第2個參數加上了10個小時,可是卻被第3個參數「start of day」把時間歸零到00:00:00,隨後的第4個參數在00:00:00
的基礎上把時間增長了10個小時變成了10:00:00。
例9把格林威治時區轉換成本地時區。
例10把格林威治時區轉換成東八區。
strftime()函數能夠把YYYY-MM-DD HH:MM:SS格式的日期字符串轉換成其它形式的字符串。
strftime()的語法是strftime(格式, 日期/時間, 修正符, 修正符, ...)
它能夠用如下的符號對日期和時間進行格式化:
%d 月份, 01-31
%f 小數形式的秒,SS.SSS
%H 小時, 00-23
%j 算出某一天是該年的第幾天,001-366
%m 月份,00-12
%M 分鐘, 00-59
%s 從1970年1月1日到如今的秒數
%S 秒, 00-59
%w 星期, 0-6 (0是星期天)
%W 算出某一天屬於該年的第幾周, 01-53
%Y 年, YYYY
%% 百分號
strftime()的用法舉例以下:
例11.
select strftime('%Y.%m.%d %H:%M:%S','now','localtime');
結果:2006.10.17 21:41:09
例11用圓點做爲日期的分隔附,並把時間轉換爲當地的時區的時間。
-------------------
select datetime('2015-06-10 11:17:00','+1 day','-1 hour','-10 minute','+1 year','start of day','+1 hour');
注意前面的條件會被後面的覆蓋.
sqlite> select strftime('%Y-%m-%d %H:%M:%S','now','localtime');
注意格式化時要使用指定的%符號,其實至關於c裏面的sprintf