我似乎无法从使用日期时间字符串作为比较的sqlite数据库的查询中获得可靠的结果,如下所示:
select *
from table_1
where mydate >= '1/1/2009' and mydate <= '5/5/2009'
Run Code Online (Sandbox Code Playgroud)
我该如何处理与sqlite的日期时间比较?
update:field mydate是DateTime数据类型
解:
遵循datetime函数并具有字符串格式为YYYY-MM-DD HH:mm:ss我取得了如下良好的结果,如下所示
select *
from table_1
where mydate >= Datetime('2009-11-13 00:00:00')
and mydate <= Datetime('2009-11-15 00:00:00')
Run Code Online (Sandbox Code Playgroud)
小智 96
为了解决这个问题,我将日期存储为YYYYMMDD.从而,
where mydate >= '20090101' and mydate <= '20050505'
它只是简单的工作.您可能只需要编写一个解析器来处理用户输入日期的方式,以便将它们转换为YYYYMMDD.
小智 56
SQLite没有专用的日期时间类型,但确实有一些日期时间函数.遵循那些函数理解的字符串表示格式(实际上只有格式1-10)(将值存储为字符串)然后你可以使用它们,加上字符串上的词典比较将匹配日期时间比较(只要你不这样做)尝试将日期与时间或日期时间进行比较,这无论如何都没有多大意义.
根据您使用的语言,您甚至可以获得自动转换.(这不适用于SQL语句中的比较,例如示例,但会让您的生活更轻松.)
小智 35
我最近遇到了同样的问题,我解决了这个问题:
SELECT * FROM table WHERE
strftime('%s', date) BETWEEN strftime('%s', start_date) AND strftime('%s', end_date)
Run Code Online (Sandbox Code Playgroud)
小智 19
以下对我来说使用SQLite很好:
SELECT *
FROM ingresosgastos
WHERE fecharegistro BETWEEN "2010-01-01" AND "2013-01-01"
Run Code Online (Sandbox Code Playgroud)
Sqlite无法比较日期.我们需要转换为秒并将其转换为整数.
例
SELECT * FROM Table
WHERE
CAST(strftime('%s', date_field) AS integer) <=CAST(strftime('%s', '2015-01-01') AS integer) ;
Run Code Online (Sandbox Code Playgroud)
小智 8
我有一种情况,我需要最多两天前到今天结束的数据。我到达了以下。
WHERE dateTimeRecorded between date('now', 'start of day','-2 days')
and date('now', 'start of day', '+1 day')
Run Code Online (Sandbox Code Playgroud)
好吧,技术上我也像原始海报一样在明天午夜拉,如果有任何数据,但我的数据都是历史数据。
要记住的关键是,最初的海报排除了 2009-11-15 00:00:00 之后的所有数据。因此,包括在 15 日午夜记录的任何数据,但不包括15 日午夜之后的任何数据。如果他们的查询是
select *
from table_1
where mydate between Datetime('2009-11-13 00:00:00')
and Datetime('2009-11-15 23:59:59')
Run Code Online (Sandbox Code Playgroud)
为了清楚起见,使用 between 子句。
它会稍微好一点。它仍然没有考虑闰秒,其中一个小时实际上可以超过 60 秒,但足以在这里讨论:)
小智 6
以下对我有用。
SELECT *
FROM table_log
WHERE DATE(start_time) <= '2017-01-09' AND DATE(start_time) >= '2016-12-21'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
169121 次 |
| 最近记录: |