sqlite 日期型 字符串轉為日期型


因為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支持以下五個日期時間函數:

  1. date(timestring, modifier, modifier, …)
  2. time(timestring, modifier, modifier, …)
  3. datetime(timestring, modifier, modifier, …)
  4. julianday(timestring, modifier, modifier, …)
  5. 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)

時間字符竄可以以下的任意一種形式:

  1. YYYY-MM-DD
  2. YYYY-MM-DD HH:MM
  3. YYYY-MM-DD HH:MM:SS
  4. YYYY-MM-DD HH:MM:SS.SSS
  5. YYYY-MM-DDTHH:MM
  6. YYYY-MM-DDTHH:MM:SS
  7. YYYY-MM-DDTHH:MM:SS.SSS
  8. HH:MM
  9. HH:MM:SS
  10. HH:MM:SS.SSS
  11. now
  12. DDDDDDDDDD

在第5至7中,T是用來分隔日期時間的(參照ISO-8601)。8至10指定的是時間格式,由於沒有日期輸入,這幾個格式默認日期為2000-01-01。第11條中,’now’ 將被轉化為當前的日期時間。

修飾符(Modifiers)

時間字符竄(time string)后台可以加上0個或者多個修飾符用以輔助改變時間字符竄。每一個修飾符都是對其左邊值的轉換,當有多個修飾符時,其生效的順序為從左至右。可用的修改符有:

  1. NNN days
  2. NNN hours
  3. NNN minutes
  4. NNN.NNNN seconds
  5. NNN months
  6. NNN years
  7. start of month
  8. start of year
  9. start of day
  10. weekday N
  11. unixepoch
  12. localtime
  13. 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 


免責聲明!

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



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