標籤:
因為sqlite為弱引用,使用欄位前將他強制轉為日期型,用datetime。或者最原始的 strftime。
SELECT distinct ID from testTable where datetime(availDate) between datetime(‘2015-01-12 04:00‘) and datetime(‘2015-01-13 00:00‘);
SQLite日期時間函數
SQLite支援以下五個日期時間函數:
- date(timestring, modifier, modifier, …)
- time(timestring, modifier, modifier, …)
- datetime(timestring, modifier, modifier, …)
- julianday(timestring, modifier, modifier, …)
- strftime(format, timestring, modifier, modifier, …)
這五個函數都是以時間字元竄(timestring)為參數,同時,時間字元竄後面還可以接收零個或者多個修飾符。另外,strftime()函數與其它的四個函數有點區別,它還可以接收一個字元竄格式(與C函數中printf函數使用字元竄格式)。
SQLite的日期時間函數使用的是ISO-8601日期時間格式規範中的子集。date()函數返回的日期格式為:YYYY-MM-DD,time()函數返回的時間格式為:HH:MM:SS,datetime()函數返回的格式為”YYYY-MM-DD HH:MM:SS”。julianday()返回的是儒略日期(Julian day)——從公元前4714年11月24日正午(以格林威治時間為準)至當前的天數。strftime()函數則按照使用者指定的格式字元竄(第一個參數)來格式化使用者的時間輸入(第二個參數)。格式字元竄的組成與C函數中的格式化參數基本相似,但表示的意義卻不相同。主要如下:
%d day of month: 00
%f fractional seconds: SS.SSS
%H hour: 00-24
%j day of year: 001-366
%J Julian day number
%m month: 01-12
%M minute: 00-59
%s seconds since 1970-01-01
%S seconds: 00-59
%w day of week 0-6 with sunday==0
%W week of year: 00-53
%Y year: 0000-9999
%% %
另外,所有其它日期時間函數能夠表達的格式,strftime()函數都可以做,如下:
Function Equivalent strftime()
date(…) strftime(‘%Y-%m-%d’, …)
time(…) strftime(‘%H:%M:%S’, …)
datetime(…) strftime(‘%Y-%m-%d %H:%M:%S’, …)
julianday(…) strftime(‘%J’, …)
但是,之所以還提供了strftime之外的其它函數,則完全是從便捷與效能上的考慮。
時間字元竄(Time String)
時間字元竄可以以下的任意一種形式:
- YYYY-MM-DD
- YYYY-MM-DD HH:MM
- YYYY-MM-DD HH:MM:SS
- YYYY-MM-DD HH:MM:SS.SSS
- YYYY-MM-DDTHH:MM
- YYYY-MM-DDTHH:MM:SS
- YYYY-MM-DDTHH:MM:SS.SSS
- HH:MM
- HH:MM:SS
- HH:MM:SS.SSS
- now
- DDDDDDDDDD
在第5至7中,T是用來分隔日期時間的(參照ISO-8601)。8至10指定的是時間格式,由於沒有日期輸入,這幾個格式預設日期為2000-01-01。第11條中,’now’ 將被轉化為當前的日期時間。
修飾符(Modifiers)
時間字元竄(time string)後台可以加上0個或者多個修飾符用以輔助改變時間字元竄。每一個修飾符都是對其左邊值的轉換,當有多個修飾符時,其生效的順序為從左至右。可用的修改符有:
- NNN days
- NNN hours
- NNN minutes
- NNN.NNNN seconds
- NNN months
- NNN years
- start of month
- start of year
- start of day
- weekday N
- unixepoch
- localtime
- utc
前面6個修飾符是對時間字元竄及其前面的修飾符處理後的時間結果進行增加或者減少。例如,對於YYYY-MM-DD格式的時間,當使用”±NNN months”修飾符時,則是對MM增加/減少相應的月數。
例子
當前日期
SELECT date(‘now’);
當月的最後一天
SELECT date(‘now’,‘start of month’,‘+1 month’,‘-1 day’);
將UNIX時間戳記轉化為時間日期格式
SELECT datetime(1092941466, ‘unixepoch’);
將UNIX時間戳記轉化為本地時間
SELECT datetime(1092941466, ‘unixepoch’, ‘localtime’);
當前日期的UNIX時間戳記格式
SELECT strftime(‘%s’,‘now’);
計算當天與美國獨立日之間的日期差(以天為單位)
SELECT julianday(‘now’) – julianday(’1776-07-04′);
計算任意時間至目前時間的時間差(以秒為單位)
SELECT strftime(‘%s’,‘now’) – strftime(‘%s’,’2004-01-01 02:34:56′);
將日期確定在本年度十月的條一個星期二
SELECT date(‘now’,‘start of year’,‘+9 months’,‘weekday 2′);
原文:http://blog.romebuilder.com/?p=96
sqlite 日期型 字串轉為日期型