首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQLite中比较两个日期?

如何在SQLite中比较两个日期?
EN

Stack Overflow用户
提问于 2012-06-04 11:46:19
回答 3查看 43K关注 0票数 16

我假设它是一个字符串,所以我将其作为字符串进行比较,但毫不奇怪它失败了。我相信这就是Mysql的工作原理。我可能错了,因为我已经有一段时间没有工作了。在这两种情况下,如何检查SQLite中的日期是否相等?我将在WHERE子句中使用它。

代码语言:javascript
复制
SELECT a._id, b._id, b.start_date,a.event_name, b.start_time, 
b.end_date, b.end_time, b.location FROM events_info b INNER JOIN events a ON
 a._id=b.event_id WHERE b.start_time = '6:00';

(添加了空间以使其更易于查看)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-04 13:09:49

SQLite没有专用的DATETIME类型。通常,人们要做的是确保将日期存储为一致的格式化字符串;例如,YYYY-MM-DD hh:mm:ss。如果你这样做,只要你是一致的,那么你就可以直接比较日期:

代码语言:javascript
复制
SELECT * FROM a WHERE q_date < '2013-01-01 00:00:00';

这是因为,即使从技术上讲,比较是按字母而不是数字进行比较,日期的格式也是一致的,无论是按字母还是按数字排序。

对于这样的模式,我建议以24小时格式存储日期(上面的示例是午夜)。用零填充月份、日期和小时。如果您的日期将跨越多个时区,请将它们全部存储在UTC中,并执行客户端所需的任何转换以将它们转换为本地时区。

通常,日期和时间都存储在一列中。如果你因为任何原因不得不分开,只要确保你的日期和时间都是一致的就行了。例如,日期应全部为YYYY-MM-DD,时间应全部为hh:mm:ss。

YYYY-MM-DD hh:mm:ss是首选格式的原因是,当您从最大的日期间隔(年)到最小的日期间隔(秒)时,您可以非常轻松地对它们进行索引和排序,并且具有高性能。

代码语言:javascript
复制
SELECT * FROM a WHERE q_date = '2012-06-04 05:06:00';

将使用索引来精确定位日期/时间,而不必执行全表扫描。或者如果它们在两个单独的行中:

代码语言:javascript
复制
SELECT * FROM a WHERE q_date = '2012-06-04' AND q_time = '05:06:00';

关键是要确保日期和时间以一致的格式进入数据库。为了用户友好的呈现,所有的转换都在客户端进行,而不是在数据库中。(例如,将'2012-06-04 05:06:00‘转换为“东部时间1:06/4/2012”。)

如果这不能回答问题,你可以发布你用来存储日期和时间的确切格式,以及你试图比较的两个没有按照你预期的方式工作的示例日期吗?

票数 37
EN

Stack Overflow用户

发布于 2015-09-08 20:05:12

Sqlite不能直接比较日期。我们需要将它们转换为秒和整数。

示例

代码语言:javascript
复制
SELECT * FROM Table  
WHERE  
CAST(strftime('%s', date_field)  AS  integer) <=CAST(strftime('%s', '2015-01-01')  AS  integer) ;
票数 6
EN

Stack Overflow用户

发布于 2012-06-04 12:09:14

来自Datatypes In SQLite Version 3

1.2日期和时间数据类型

SQLite没有为存储日期和/或时间而预留的存储类。相反,SQLite的内置Date And Time Functions能够将日期和时间存储为文本、实数或整数值:

  • TEXT as Unix字符串("YYYY-MM-DD HH:MM:SS.SSS").
  • REAL as儒略日数字,自公元前4714年11月24日格林威治中午以来的天数。根据公元前1114年的公历时间,自1970-01-01 00:00:00 UTC以来的秒数。

应用程序可以选择以这些格式中的任何一种格式存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换。

如果您查看Date And Time Functions中的示例,就会发现类似这样的内容会让您更接近您想要的内容(我假设是当天的6:00 ):

代码语言:javascript
复制
WHERE b.start_time = date('now', 'start of day', '+6 hours')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10876105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档