Discuz! Board

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

sqlite

[复制链接]

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
跳转到指定楼层
楼主
发表于 2016-8-12 15:54:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hechengjin 于 2016-8-12 16:02 编辑

http://www.runoob.com/sqlite/sqlite-date-time.html

select datetime(date, 'unixepoch', 'localtime') from mail_index
http://codego.net/9872571/
回复

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
沙发
 楼主| 发表于 2016-8-22 15:18:23 | 只看该作者
Select * From MAIN.[folders] where  specialFolderType != 0x00000001       这种写法有些SQLite Developer不支持  firefox扩展是支持的
update MAIN.[mail_index] set flags = flags | 0x00000002 where rowid=1
回复 支持 反对

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
板凳
 楼主| 发表于 2016-8-22 15:55:44 | 只看该作者
本帖最后由 hechengjin 于 2016-8-22 15:59 编辑

SQLite的,异或。如何清除一个标志?
^是SQLite中是非法的
1.似乎没有成为一个XOR运算的源码。你可以模拟
select (~(a&b))&(a|b)
例如,当1111(15)被屏蔽的0100(4):
select (~(15&4))&(15|4)
答案是1011(11)。通过这种方式,你可以清除标志。
update MAIN.[mail_index] set flags = (~(flags&0x00000002))&(flags|0x00000002)   where rowid=1



Select rowid,* From MAIN.[mail_index] Limit 1000
update MAIN.[mail_index] set flags = 0x00000001   where rowid=1
update MAIN.[mail_index] set flags = flags | 0x00000002 where rowid=1
update MAIN.[mail_index] set flags = (~(flags&0x00000002))&(flags|0x00000002)   where rowid=1
回复 支持 反对

使用道具 举报

1228

主题

1996

帖子

7570

积分

认证用户组

Rank: 5Rank: 5

积分
7570
地板
发表于 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

主题

1996

帖子

7570

积分

认证用户组

Rank: 5Rank: 5

积分
7570
5#
发表于 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-4-19 20:55 , Processed in 0.059823 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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