SQLite日期比较

时间:2018-02-10 14:18:36

标签: sqlite

如何比较SQLite数据库中以DD-MMM-YYYY格式存储的日期,例如10-OCT-2017?

我想比较日期并选择特定日期和相邻日期的行。

1 个答案:

答案 0 :(得分:1)

简短回答

痛苦地。您必须将日期字符串(尤其是字符月份)转换为数字值,然后您可以比较日期值。

...或者更容易,通过使用“2018-01-01”等格式存储日期,可以通过SQLite日期函数在SQL中进行本机比较。

更长的答案

This page显示所有可用的SQLite SQL日期时间函数。它们都不会产生或操纵字符月值。所以你的选择是:

1)通过SQL选择一组记录到数据集中;然后使用您的编程语言将数据集中的日期值转换为值相当的格式;然后比较它们。

除了非常小的数据查询之外,这样做的性能很差,但实现起来可能相当简单,并且不需要进行数据转换。 (要专门回答您提出的问题,这是应用选择少量数据集和小数据集的最佳解决方案。)

2)创建一个SQLite函数来进行日期格式转换。为此,您使用SQLite的C API。 See more how-to discussion here.

我自己并没有这样做,我不会仅仅因为学习曲线而推荐这条路线,而且还因为类型& SQLite的目的及其功能。 (要专门回答您提出的问题,这是少数而非小型数据集的最佳解决方案。)

3)(此选项不回答您的具体问题)将存储的日期值转换为本机SQL可比较格式。喜欢:“2018-01-01”。然后,您可以使用SQLite日期时间函数进行相邻的日期比较。

样品:

 select mySQLTableDate, myOtherSQLTableDate
      date(mySQLTableDate,'+1 day'),  -- YYYY-DD-MM stored format
      date(strftime('%Y-%m-%d', mySQLTableDate),'+1 day') -- many stored formats
  from mySQLTable
  where select mySQLTableDate = date(myOtherSQLTableDate,'+1 day') 

根据目标而不是具体问题:)回答您的问题,我的建议是使用此解决方案,尤其是在您扫描大量数据时。 See more about SQLite Date types here,但对于没有时间的日期,我只是将它们存储为字符串“2018-01-01”。我正在使用.js,这很容易转换为.js Date对象。