SQLite 的日期时间函数
最近在做一个Android里边SQLite数据库的一个统计功能,需要取当日、当月的数据信息,用到了SQLite的日期函数,百度了一下,把找到的内容共享出来,希望对大家有用。 先共享一个示例:select strftime('%Y-%m',adddate) from nettrafficstatistics where date(adddate) = '2011-11-01',相信大家一看就能明白,就不详细解释了。 以下是找到的函数说明内容 ------------------------------------------------------------------------------------------------------------------------------------------------------------- SQLite 包括以下五个时间函数: date(日期时间字符串,修正符,……) 上述五个函数需要一个日期时间字符串做参数,后面可以跟零到多个修正符参数。而 strftime() 函数还需要一个日期时间格式字符串做第一个参数。 date() 函数返回一个以 “YYYY-MM-DD” 为格式的日期; %d 一月中的第几天 01-31 其他四个函数都可以用 strftime() 函数来表示: date(…) -> strftime(“%Y-%m-%d”,…) 日期时间字符串可以用以下几种格式: YYYY-MM-DD 在第五种到第七种格式中的“T”是一个分割日期和时间的字符;第八种到第十种格式只代表2000-01-01日的时间,第十一种格式的’now’表示返回一个当前的日期和时间,使用格林威治时间(UTC);第十二种格式表示一个 Julian Day Numbers。 修正符 日期和时间可以使用下面的修正符来更改日期或时间: 1. NNN days 前六个修正符就是简单的增加指定数值的时间和日期;第七到第十个修正符表示返回当前日期的开始;第十一个修正符表示返回下一个星期是N的日期和时间;第十二个修正符表示返回从1970-01-01开始算起的秒数;第十三个修正符表示返回本地时间。 下面举一些例子: 计算机当前时间 计算机当前月份的最后一天 计算UNIX 时间戳1092941466表示的日期和时间 计算 UNIX 时间戳1092941466 表示的本地日期和时间 计算机当前UNIX 时间戳 两个日期之间相差多少天 两个日期时间之间相差多少秒 计算今年十月份第一个星期二的日期 得到年 得到月 例1. 例2. 例3. 例4. 例5. 例6. 例7. 例8. 例9. 例10. 例3中的+1 hour和-12 minute表示可以在基本时间上(datetime函数的第一个参数)增加或减少一定时间。 例5中的start of year表示一年开始的时间。 从例8可以看出,尽管第2个参数加上了10个小时,但是却被第3个参数“start of day”把时间归零到00:00:00,随后的第4个参数在00:00:00 例9把格林威治时区转换成本地时区。 例10把格林威治时区转换成东八区。 strftime()函数可以把YYYY-MM-DD HH:MM:SS格式的日期字符串转换成其它形式的字符串。strftime()的语法是strftime(格式,日期/时间,...) 它可以用以下的符号对日期和时间进行格式化: %d 月份,01-31 strftime()的用法举例如下: 例11用圆点作为日期的分隔附,并把时间转换为当地的时区的时间 在做ClinicOS的时候遇到一个问题,在保存病历登记时间时,我使用了“CURRENT_TIMESTAMP”,但这有个问题,它返回的是UTC Time,这对我们中国人没啥用, Where julianday(date('now','localtime')) - julianday(date(arrival_date)) > 7 嘿嘿,看来如果想得到一个符合本机区域设置的当前时间,必须用date函数来转换, 但date只函数只返回当前日期,而我需要的是返回当前日期及时间,所以这里把它换成datetime函数,即: datetime(CURRENT_TIMESTAMP,'localtime') 以下是sqlite下测试的输出信息: sqlite> select CURRENT_TIMESTAMP; 2006-06-18 09:23:36 sqlite> select datetime(CURRENT_TIMESTAMP,'localtime'); 2006-06-18 17:23:44 sqlite> 比如今天是:200-02-22 运行如下语句所得到的结果不一样: select date('now') select datetime('now','localtime') 所以比较时用第二种语句才取得正确结果,例如(取大于现在时间的记录): 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'),'now') FROM Placard 差8个时区... 上一条:大于指定时间的第一条 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 前面只能用 - 后面只能用:不足二位数的补零 下一条:小于指定时间的第一条 注意时间的精度。03:35:28 后面就没有了。 03:35:28.000 原文地址:http://jianhai1229.blog.163.com/blog/static/3488700020115834648430/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |