【转】关于Sqlite的日期比较方法

本文介绍了SQLite中处理日期和时间的方法,强调了在比较日期时使用datetime('now','localtime')的正确性,并展示了如何模拟MSSQL的datediff功能。通过strftime格式化日期进行日、周、年的比较。此外,还提供了处理时区和时间精度的示例,以及在查询中获取指定时间前后第一条记录的SQL语句。" 49706241,5124445,JavaWeb验证码实现:Servlet详解,"['javaweb', '验证码', 'servlet']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sqlite的日期比较方法:

 

 

比如今天是:200-02-22

运行如下语句所得到的结果不一样:

select date('now')
结果:2009-02-21 

select datetime('now','localtime')
结果:2009-02-22 00:52:04 
--------------------------- 分隔线 --------------------------

 

所以比较时用第二种语句才取得正确结果,例如(取大于现在时间的记录):

select * from 表 where 日期字段>datetime('now','localtime')

 

好象没有MSSQL的datediff等函数

如下语句实现datediff('m',开始日期,结束日期')函数同一个数数据:

select * from 表 where strftime('%m',日期字段)=strftime('%m','now')

如此就可以实现了两个日期相比较,举一反三,同样使用strftime格式式日期来对日、周、年比较

参考Sqlite日期函数详细文档:

http://www.xueit.com/html/2009-02/27_649_00.html

 

--------------------------- 分隔线 如下收集于网络 -------------

select * from Placard where Placard_EndTime > datetime('now');

 

SELECT Placard_StartTime,strftime('%s',Placard_StartTime) , datetime('now'),strftime('%s','now') FROM Placard

差8个时区...

SELECT Placard_StartTime,strftime('%s',Placard_StartTime) , datetime('now','localtime'),strftime('%s','now','localtime') FROM Placard

 

上一条:大于指定时间的第一条         

select title,pubtime from article where pubtime>'2008-06-15 03:35:28' order by pubtime asc Limit 1 Offset 0

 

貌似时间的格式有严格的要求 2008-06-15 03:35:28 前面只能用 - 后面只能用:不足二位数的补零

 

下一条:小于指定时间的第一条

select title,pubtime from article where pubtime<'2008-06-15 03:35:28' order by pubtime desc Limit 1 Offset 0

 

注意时间的精度。03:35:28 后面就没有了。

03:35:28.000

 

 

时间的精度似乎只能到秒级的,不过满足现在的项目需求是足够了

 

经过一段时间的实践,其实可以在日期这列直接存储日期的tick。比较日期的tick大小就可以知道时间的早晚了。这样时间的精度也可以达到毫秒级。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值