`
mengsina
  • 浏览: 191476 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQLite 的日期时间函数

阅读更多
最近在做一个Android里边SQLite数据库的一个统计功能,需要取当日、当月的数据信息,用到了SQLite的日期函数,百度了一下,把找到的内容共享出来,希望对大家有用。
先共享一个示例:select strftime('%Y-%m',adddate) from nettrafficstatistics where date(adddate) = '2011-11-01',相信大家一看就能明白,就不详细解释了。

以下是找到的函数说明内容
-------------------------------------------------------------------------------------------------------------------------------------------------------------
SQLite 包括以下五个时间函数:

date(日期时间字符串, 修正符, 修正符, ……)
time(日期时间字符串, 修正符, 修正符, ……)
datetime(日期时间字符串, 修正符, 修正符, ……)
julianday(日期时间字符串, 修正符, 修正符, ……)
strftime(日期时间格式, 日期时间字符串, 修正符, 修正符, ……)

上述五个函数需要一个日期时间字符串做参数,后面可以跟零到多个修正符参数。而 strftime() 函数还需要一个日期时间格式字符串做第一个参数。

date() 函数返回一个以 “YYYY-MM-DD” 为格式的日期;
time() 函数返回一个以 “YYYY-MM-DD HH:MM:SS” 为格式的日期时间;
julianday() 函数返回一个天数,从格林威治时间公元前4714年11月24号开始算起;
strftime() 函数返回一个经过格式话的日期时间,它可以用下面的符号对日期和时间进行格式化:

%d 一月中的第几天 01-31
%f 小数形式的秒,SS.SSSS
%H 小时 00-24
%j 一年中的第几天 01-366
%J Julian Day Numbers
%m 月份 01-12
%M 分钟 00-59
%s 从 1970-01-01日开始计算的秒数
%S 秒 00-59
%w 星期,0-6,0是星期天
%W 一年中的第几周 00-53
%Y 年份 0000-9999
%% % 百分号

其他四个函数都可以用 strftime() 函数来表示:

date(…)         ->   strftime(“%Y-%m-%d”,…)
time(…)         ->   strftime(“%H:%M:%S”,…)
datetime(…)    ->   strftime(“%Y-%m-%d %H:%M:%S”,…)
julianday(…)   ->   strftime(“%J”,…)

日期时间字符串可以用以下几种格式:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDD.DDDD

在第五种到第七种格式中的“T”是一个分割日期和时间的字符;第八种到第十种格式只代表2000-01-01日的时间,第十一种格式的’now’表示返回一个当前的日期和时间,使用格林威治时间(UTC);第十二种格式表示一个 Julian Day Numbers。

修正符

日期和时间可以使用下面的修正符来更改日期或时间:

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 week
10.start of day
11.weekday N
12.unixepoch
13.localtime
14.utc

前六个修正符就是简单的增加指定数值的时间和日期;第七到第十个修正符表示返回当前日期的开始;第十一个修正符表示返回下一个星期是N的日期和时间;第十二个修正符表示返回从1970-01-01开始算起的秒数;第十三个修正符表示返回本地时间。

下面举一些例子:

计算机当前时间
SELECT date(‘now’)

计算机当前月份的最后一天
SELECT date(‘now’,’start of month’,’+1 month’,’-1 day’)

计算UNIX 时间戳1092941466表示的日期和时间
SELECT datetime(‘1092941466’,’unixepoch’)

计算 UNIX 时间戳1092941466 表示的本地日期和时间
SELECT datetime(‘1092941466’,’unixepoch’,’localtime’)

计算机当前UNIX 时间戳
SELECT strftime(‘%s’,’now’)

两个日期之间相差多少天
SELECT jolianday(‘now’)-jolianday(‘1981-12-23’)

两个日期时间之间相差多少秒
SELECT julianday('now')*86400 - julianday('2004-01-01 02:34:56')*86400

计算今年十月份第一个星期二的日期
SELECT date('now','start of year','+9 months','weekday 2');

得到年
strftime(‘%y’,'2008-4-28')

得到月
strftime(‘%m’,'2008-4-28')

同样,我们也可以通过strftime来得到其它所要的信息,但是要记得,给时间加引号

例1.
select datetime('now');
结果:2006-10-17 12:55:54

例2.
select datetime('2006-10-17');
结果:2006-10-17 12:00:00

例3.
select datetime('2006-10-17 00:20:00','+1 hour','-12 minute');
结果:2006-10-17 01:08:00

例4.
select date('2006-10-17','+1 day','+1 year');
结果:2007-10-18

例5.
select datetime('now','start of year');
结果:2006-01-01 00:00:00

例6.
select datetime('now','start of month');
结果:2006-10-01 00:00:00

例7.
select datetime('now','start of day');
结果:2006-10-17 00:00:00

例8.
select datetime('now','+10 hour','start of day','+10 hour');
结果:2006-10-17 10:00:00

例9.
select datetime('now','localtime');
结果:2006-10-17 21:21:47

例10.
select datetime('now','+8 hour');
结果:2006-10-17 21:24:45

例3中的+1 hour和-12 minute表示可以在基本时间上(datetime函数的第一个参数)增加或减少一定时间。

例5中的start of year表示一年开始的时间。

从例8可以看出,尽管第2个参数加上了10个小时,但是却被第3个参数“start of day”把时间归零到00:00:00,随后的第4个参数在00:00:00
的基础上把时间增加了10个小时变成了10:00:00。

例9把格林威治时区转换成本地时区。

例10把格林威治时区转换成东八区。

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()的用法举例如下:
例11.
select strftime('%Y.%m.%d %H:%M:%S','now','localtime');
结果:2006.10.17 21:41:09

例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')
结果: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

原文地址:http://jianhai1229.blog.163.com/blog/static/3488700020115834648430/

eoeandroid上面的参考函数。
http://www.eoeandroid.com/thread-192516-1-1.html
分享到:
评论

相关推荐

    SQLITE时间日期函数

    本文将详细介绍SQLite中关于时间日期的操作,包括常用的日期时间函数及其用法。 #### 二、SQLite时间日期函数概述 SQLite提供了多种内置函数来处理时间日期数据,主要包括`datetime()`、`date()`、`time()`以及`...

    SQLite时间转化问题

    SQLite 中的日期和时间函数是数据库管理中非常重要的一部分,掌握这些函数可以帮助开发者更好地处理日期和时间的转换操作。下面是 SQLite 中五个时间函数的介绍: 1. date() 函数:该函数返回一个以 “YYYY-MM-DD...

    Sqlite3时间存储格式问题?

    SQLite3 提供了一系列内置的日期和时间函数,如 `strftime()` 用于将日期和时间转换为字符串,`julianday()` 和 `datetime()` 用于在不同格式之间转换,以及 `date()`、`time()` 和 `timestamp()` 函数来提取日期、...

    sqlite3使用日期、时间数据类型.pdf

    SQLite3提供了丰富的内置函数来操作日期和时间,使得开发者可以灵活地在不同的日期时间格式之间进行转换。例如: 1. date() 函数可以将时间字符串转换为日期字符串; 2. time() 函数可以将时间字符串转换为时间字符...

    SQLite内建函数表

    它提供了丰富的内建函数,涵盖数学运算、字符串处理、日期时间操作等多个方面,极大地提升了数据处理的灵活性和效率。 #### 数学函数 - **ABS(X)**:返回参数X的绝对值。 - **MAX(X,Y[,])**:返回一系列参数中的...

    sqlite管理工具介绍 时间查询介绍

    在查询时,使用`datetime()`函数将字符串转换为日期时间,例如`datetime(testtime) &gt;= '2013-03-12 14:42:00'`。这可以避免因日期时间格式不匹配而导致的“未被识别为有效的DateTime”异常。 通过以上步骤,你可以...

    SQLite3中的日期时间函数使用小结

    以下是关于SQLite3中日期时间函数的详细说明,以及如何使用它们。 1. **日期和时间的存储方式** SQLite3允许将日期和时间存储为以下三种形式: - TEXT: 以ISO8601标准字符串(如'YYYY-MM-DD HH:MM:SS.SSS')的...

    SQLite函数大全

    日期和时间函数 1. date(日期时间字符串,修正符,修正符,……):返回一个以 YYYY-MM-DD 为格式的日期 2. time(日期时间字符串,修正符,修正符,……):返回一个以 HH:MM:SS 为格式的日期时间 3. datetime(日期...

    SQLite函数使用教程 源码

    本教程将深入讲解SQLite函数的使用,帮助你更好地理解和应用SQLite。 一、SQL基础与SQLite函数 SQL(Structured Query Language)是用于管理关系数据库的语言。在SQLite中,我们可以使用各种内置函数来执行常见的...

    SQLite-function.rar_sqlite函数

    3. 日期和时间函数: - CURRENT_TIMESTAMP:当前日期和时间。 - DATE(TIME):提取TIME中的日期部分。 - TIME(TIME):提取TIME中的时间部分。 - DATETIME(TIME):提取TIME的日期和时间部分。 - JULIAN_DAY(D):D...

    浅谈SQLite时间函数的使用说明与总结分析

    SQLite是一个轻量级的数据库引擎,它包含了丰富的内置函数,其中时间函数对于处理日期和时间数据至关重要。在本文中,我们将深入探讨SQLite中的时间函数,包括它们的使用方法、功能和示例,帮助读者理解和应用这些...

    Python SQLite3数据库日期与时间常见函数用法分析

    本文实例讲述了Python SQLite3数据库日期与时间常见函数。分享给大家供大家参考,具体如下: import sqlite3 #con = sqlite3.connect('example.db') con = sqlite3.connect(":memory:") c = con.cursor() # Create ...

    sqlitesqlite

    SQLite提供了诸如`STRFTIME`、`JULIANTIMESTAMP`、`strftime`等函数,用于格式化、转换和比较日期时间。例如,`STRFTIME('%Y-%m-%d', datetime_column)`可以将日期时间列格式化为"年-月-日"的字符串形式。 2. ...

    Qt中用SQLite读写时间和日期.pdf

    总的来说,Qt结合SQLite处理日期和时间的关键在于使用`QDateTime`类进行日期时间的处理,并通过`QString`进行字符串转换,以便于与SQLite数据库进行交互。在查询时,可以灵活地构建SQL语句来满足特定需求。注意,...

    C# Sqlite分页查询,日期查询

    可以使用`STRFTIME`函数进行日期和时间的格式化和比较。例如,要获取过去24小时内创建的记录,可以这样做: ```csharp string query = "SELECT * FROM TableName WHERE CreatedAt &gt;= STRFTIME('%Y-%m-%d %H:%M:%S',...

    sqlite时间戳转时间语句(时间转时间戳)

    在SQLite中,`datetime()`函数可以用于将Unix时间戳转换为日期时间格式。Unix时间戳是从1970年1月1日(UTC)午夜开始计算的秒数。例如,要将时间戳1377168853转换为日期时间,你可以使用以下SQL语句: ```sql ...

    SQLiteStudio3.rar

    8. **函数和操作符**:SQLiteStudio包含了SQLite所有的内置函数和操作符,方便在查询时使用,例如日期时间函数、字符串函数、数学运算等。 9. **性能分析**:对于复杂查询,SQLiteStudio还提供了一些性能分析工具,...

Global site tag (gtag.js) - Google Analytics