Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1985|回复: 4
打印 上一主题 下一主题

sqlite

[复制链接]

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
楼主
发表于 2017-1-25 09:45:24 | 显示全部楼层
  1. select datetime('now');
  2. 结果:2006-10-17 12:55:54
  3. select datetime('2006-10-17');
  4. 结果:2006-10-17 12:00:00
  5. select datetime('2006-10-17 00:20:00', '+1 hour', '-12 minute');
  6. 结果:2006-10-17 01:08:00
  7. select date('2006-10-17', '+1 day', '+1 year');
  8. 结果:2007-10-18
  9. select datetime('now', 'start of year');
  10. 结果:2006-01-01 00:00:00
  11. select datetime('now', 'start of month');
  12. 结果:2006-10-01 00:00:00
  13. select datetime('now', 'start of day');
  14. 结果:2006-10-17 00:00:00
  15. # 尽管第2个参数加上了10个小时,但是却被第3个参数 start of day 把时间归零到00:00:00
  16. # 随后的第4个参数在00:00:00的基础上把时间增加了10个小时变成了10:00:00。
  17. select datetime('now', '+10 hour', 'start of day', '+10 hour');
  18. 结果:2006-10-17 10:00:00
  19. # 把格林威治时区转换成本地时区。
  20. select datetime('now', 'localtime');
  21. 结果:2006-10-17 21:21:47
  22. select datetime('now', '+8 hour');
  23. 结果:2006-10-17 21:24:45
复制代码
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() 的用法举例如下:

select strftime('%Y/%m/%d %H:%M:%S', 'now', 'localtime');

回复 支持 反对

使用道具 举报

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
沙发
发表于 2017-1-25 09:50:55 | 显示全部楼层
首先,sqlite数据库在时间处理上和sqlserver还有oracle不同,下面根据自己做过的实例总结一下.

创建了一个Log数据表:


LogID SourceID OperatorID LogType LogLevel LogTime              LogContent
1 aaa.aspx 0 2 1 2011-08-18 16:44:32.000 aaaa
2 bbb.aspx 1 2 2 2011-08-18 16:38:32.000 bbbb
3 ccc.aspx 2 3 3 2011-09-02                 cccc
4 ddd.aspx 3 1 4 2011-08-15                 dddd
5 eee.aspx 4 1 3 2011-08-18                 eee

普通的sqlserver的查询语句如下:select * from Log where LogTime='2011-09-02'可以查询出"'2011-09-02"的数据。

而在sqlite数据库中,写上面的语句,查询不到任何数据;说明sqlserver于sqlite对于时间处理上是不同的。那么如何写一条以时间为查询条件的sql语句才能在sqlite数据库中把想要的结果查询出来呢?请看::::

select * from Log where datetime(LogTime)=datetime('2011-08-18 16:38:32.000')

sqlite数据查询语句,必须对时间字段和传入的时间参数做转换.即加上datetime()转换.

执行了上面的语句,就可以得到要查找到结果。如果按照sqlserver的写法,那么是不会得到查询结果的。

另外,一些错误的查询语句如下:

1: select * from Log where datetime(LogTime)=datetime('2011-08-18'),这条语句只能查询到一条数据,就是对应LogID=5的那条,而不会得到LogID=1和LogID=2的数据。可见,sqlite对于时间是非常严格的。精确度非常高。

2:select * from Log where datetime(LogTime)=datetime('2011-8-18'),这条语句是查询不到任何结果,因为sqlite的时间要求是yyyy-MM-dd或者yyyy-MM-dd hh:mm:ss的。当月数为10以下,那么必须写成0x的形式(如:05),所以在做开发的时候一定要对入库的时间做相应处理。

3: select * from Log where datetime(LogTime)=datetime('2011-08-9'),同样的,这条语句也查询不到任何结果,应该把9改成09,就可以得到查询结果了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-5-3 05:18 , Processed in 0.055409 second(s), 17 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表