如何比较SQLite数据库中以DD-MMM-YYYY格式存储的日期,例如10-OCT-2017?
我想比较日期并选择特定日期和相邻日期的行。
答案 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对象。