我在移动设备和我的数据库中使用sqlite
本地数据库,我的日期字段的列名为RN_CREATE_DATE
。我的RN_CREATE_DATE
列值采用此格式'dd-mm-yy HH:MM:SS'
,我想获取给定日期的数据。对于我尝试使用以下数据库列和值
** RN_CREATE_DATE
2012-07-27 11:04:34
2012-05-28 10:04:34
2012-07-22 09:04:34 **
SELECT RN_CREATE_DATE
FROM DISPOSITION
WHERE RN_CREATE_DATE=strftime('%Y', '2012-07-28 12:04:34')
但没有找到结果,只是帮我解决这个问题。
答案 0 :(得分:25)
strftime
的工作原理如下:
sqlite> select strftime('%d-%m-%Y %H:%M:%S', datetime('now'));
2012-09-13 12:42:56
如果您想在WHERE
子句中使用它,请将datetime('now')
替换为您希望以YYYY-mm-dd HH:MM:SS
格式匹配的日期时间。
示例:强>
SELECT *
FROM t
WHERE c = strftime('%d-%m-%Y %H:%M:%S', '2012-09-13 12:44:22');
-- dd-mm-YYYY HH:MM:SS YYYY-mm-dd HH:MM:SS
答案 1 :(得分:3)
我想在UNIX纪元时间添加有关使用SQLite日期和时间的一些信息:
UNIX纪元是1970年1月1日00:00:00,即1970年1月1日午夜。自那时起,UNIX机器(如运行Linux的机器)上的当前时间以秒为单位。
SQLite支持这个纪元时间,并且我发现它非常有用,可以将它用作SQLite中DateTime字段的格式。
具体地说,假设我想要一个事件表,用于音乐会等事件。我想在事件开始时存储fromDateTime字段。我可以通过将fromDateTime字段设置为INTEGER类型来实现:
createdDate
现在,让我们使用SQLite DateTime字段来使用UNIX纪元:
CREATE TABLE IF NOT EXISTS Event(
eventID INTEGER PRIMARY KEY,
name TEXT,
ratingOutOf10 REAL,
numberOfRatings INTEGER,
category TEXT,
venue TEXT,
fromDateTime INTEGER,
description TEXT,
pricesList TEXT,
termsAndConditions TEXT
);
现在,以上是我们的事件表的示例用法:
Basic
select strftime('%s', '2016-01-01 00:10:11'); --returns 1451607012
select datetime(1451607012, 'unixepoch'); --returns 2016-01-01 00:10:11
select datetime(1451607012, 'unixepoch', 'localtime'); --returns 2016-01-01 05:40:11 i.e. local time (in India, this is +5:30).
Only dates and/or times:
select strftime('%s', '2016-01-01'); --returns 1451606400
select strftime('%s', '2016-01-01 16:00'); --returns 1451664000
select date(-11168899200, 'unixepoch'); --returns 1616-01-27
select time(-11168899200, 'unixepoch'); --returns 08:00:00
Other stuff:
select strftime('%d-%m-%Y %H:%M:%S', '2012-09-13 12:44:22') --returns 13-09-2012 12:44:22
我喜欢这个解决方案,因为它很容易使用编程语言,而不必过多考虑SQLite的DATE,TIME,DATETIME等数据类型中涉及的各种格式。
答案 2 :(得分:1)
strftime
总是生成四位数年份,因此您必须使用substr
来切断前两位数字:
... WHERE RN_CREATE_DATE = strftime('dd-mm-', '2012-07-28 12:04:34') ||
substr(strftime('%Y %H:%M:%S', '2012-07-28 12:04:34'), 3)
以SQLite直接理解的格式存储列值会更容易。
答案 3 :(得分:0)
strftime('%Y', '2012-07-28 12:04:34')
返回 2012 ,如下:
sqlite> select strftime('%Y', '2012-07-28 12:04:34');
2012
但RN_CREATE_DATE属于datetime类型,期望完整的日期时间,例如“2012-07-28 12:04:34”。你想要的可能只是:
SELECT RN_CREATE_DATE
FROM DISPOSITION
WHERE RN_CREATE_DATE='2012-07-28 12:04:34'