SQLite教程(内置日期和时间函数)

来源:互联网 发布:软件集成测试 编辑:程序博客网 时间:2024/06/01 18:55

SQLite数据库


1. 简介:

SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。

2. 字段类型:

  1. NULL: null值

  2. INTEGER: 一个带有符号整数,根据值的大小存储在1-4字节中

  3. REAL:一个浮点数,储存为8字节的IEEE浮点数

  4. TEXT:一个文字字符串,根据数据库编码存储(UTF-8/UTF-16BE/UTF-16LE)

  5. BLOB:一个 blob 数据,完全根据它的输入存储。

更多其他数据库(例如MYSQL)中字段类型对应SQLite的类型,请参考SQlite类型官方介绍,看不懂英文的小伙伴,请看中文翻译的SQLite中数据类型。

3. SQLite的增删查改操作及事务:

SQLite的增删查改操作比较常见,事务使用也比较常见,这里不多做介绍。更多具体详情,SQLite教程的增删查改.

4. SQLite特殊数据存储(重点):

  1. 存储日期和时间数据类型:

    SQLite没有专门提供存储日期和时间存储类型,通常可以TEXT , REAL和INTEGER类型来替代的方式存储。

    • TEXT对应的数据:"YYYY-MM-DD HH:MM:SS.SSS"格式的数据

    • REAL对应的数据: Julian日期格式存储,即从公元前 4714 年 11 月 24 日格林尼治时间的正午开始算起的天数。

    • INTEGER对应的数据:Unix时间形式的数据 , 即从 1970-01-01 00:00:00 UTC 算起的秒数。

    可以以任何上述格式来存储日期和时间,并且可以使用内置的日期和时间函数来自由转换不同格式。

  2. 布尔数据类型:

    采用true用1替代和false用0替代的方式存储。

SQLite 内置的日期 & 时间函数

SQLite 支持以下五个日期和时间函数,如:

 date(timestring, modifier, modifier, ...)  : 返回YYYY-MM-DD 格式的日期 time(timestring, modifier, modifier, ...) :  返回 HH:MM:SS格式的时间 datetime(timestring, modifier, modifier, ...) 返回YYYY-MM-DD HH:MM:SS格式的日期时间 julianday(timestring, modifier, modifier, ...): 返回从格林尼治时间的公元前 47141124 日正午算起的天数 strftime(format, timestring, modifier, modifier, ...) :返回指定格式(即第一个参数)的日期

上述五个日期和时间函数把时间字符串(TimeString)作为参数。时间字符串后跟零个或多个 modifier 修饰符。strftime() 函数也可以把格式字符串 format 作为其第一个参数。

注意点:以上几个函数也可以转换成strftime函数,如下:

date(...)         strftime('%Y-%m-%d', ...)time(...)         strftime('%H:%M:%S', ...)datetime(...)     strftime('%Y-%m-%d %H:%M:%S', ...) julianday(...)    strftime('%J', ...)   

下面将详细讲解函数中的不同类型的时间字符串和修饰符,格式。

  1. TimeString(时间字符串)

    一个带有格式的具体时间(例如,2017-04-31),现在的时间用now替代。更多格式,具体如下:

    • YYYY-MM-DD :例如,2017-12-30
    • YYYY-MM-DD HH:MM: 例如,2017-12-30 12:10
    • YYYY-MM-DD HH:MM:SS.SSS 例如:2070-12-30 12:10:04.100
    • MM-DD-YYYY HH:MM 例如:30-12-2017 12:10
    • HH:MM 例如: 12:10
    • YYYY-MM-DDTHH:MM 2017-12-30 12:10
    • HH:MM:SS 12:10:01
    • YYYYMMDD HHMMSS 20171230 121001
    • now :例如,当前时间,2017-4-9
  2. Modifier(修饰符)

     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
    • 从第1到第6,只是加减指定具体数量的时间或者日期,NNN为负数,则减去NNN个时间或者日期。反之,NNN为正,则加;
    • 第7到第9,是将指定日期设置到当前的月或年或日开始.start of month即当年-当月-1日,start of year即当年-1月-1日,依次类推;
    • 第10是将日期设置下一个星期N,其中星期日为0;
    • 第11是unix时间戳转换成对应的日期和时间;
    • 第12是转成当地的日期和时间;

    注意点:修饰符顺序是从左边到右边依次逐个执行的,即执行完前一个才能执行下一个。

  3. Strftime()中使用的格式

格式   格式说明%d  天数,例如:01-31中某一个天%f  带小数部分(SS.SSS格式)的秒%H  小时,例如: 00-23中某一个小时%j  一年中的第几天,001-366%J  儒略日数,DDDD.DDDD%m  月,00-12中某一具体月份%M  分,00-59%s  从 1970-01-01 算起的秒数%S  秒,00-59%w  一周中的第几天,0-6 (0 is Sunday)%W  一年中的第几周,01-53%Y  年,YYYY%%  % symbol

SQLite案例之使用时间和日期函数:


在Android SDK中的tools文件下找到Sqlite.exe或者SQLite下载进行下载获取。使用Sqlite3.exe来运行sql语句。

案例1:获取YYYY-MM-DD格式的当前日期,例如 2017-4-9

分析:
1. 采用date()函数返回YYYY-MM-DD格式的日期
2. 采用时间字符串now来指定当前时间

因此,此SQL语句为:SELECT date('now');

案例2:获取当前月的最后一天,例如2017-4-30

分析:
1. 采用date()函数返回YYYY-MM-DD格式的日期
2. 采用时间字符串(now)来指定当前时间,这时日期为 :当年-当月-当日
3. 使用修饰符(start of month)设置时间为当月,在这时日期为:当年-当月-1日
4. 添加一个月,即修饰符(1 month),在这时日期为:当年-(当月+1)-1日
5. 减去一天,即修饰符(- 1 day),获取到当月最后一天,在这时日期为:当年-当月-最大天数

因此,此SQL语句为:SELECT date('now','start of month','+1 month','-1 day');

案例3:返回从1970-01-01 00:00:00到当前时间所流经的秒数

分析:
1. 采用strftime()函数
2. 采用秒的格式,%s
3. 指定时间字符串(now)

因此,此SQL语句为:SELECT strftime('%s','now');

案例4:计算从 2004 年某一特定时刻以来的秒数

分析:
1. 计算到2004-01-01 02:34:56的秒速
2. 计算到当今的秒数
3. 两者相减操作。

因此,此SQL语句为:SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');

SQLite.exe执行sql,输出结果如下:

这里写图片描述

资源参考:

  • SQLite官网: http://www.sqlite.org/docs.html
  • SQLite中文网: http://www.runoob.com/sqlite/sqlite-tutorial.html
  • SQLite学习手册: http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328757.html
1 0