在两个日期之间从sqlite DB检索数据 - 使用目标c

时间:2016-01-29 07:00:33

标签: ios objective-c sqlite ios9.1

我使用以下查询进行日期过滤,但结果出错了。

SELECT * FROM TRANSACTIONSHISTORY 
WHERE DATE > "29-01-2015 12:00:00" 
AND DATE < "30-01-2015 00:00:00" AND USERID=abc

我收到日期栏的结果,其值为2016年1月29日的记录,我在这里缺少什么,任何人都可以帮助我摆脱这个价值。

4 个答案:

答案 0 :(得分:1)

SQL中的日期格式无效,因为SQLite没有本机日期时间类型,因此它通常以YYYY-MM-DD HH:MM:SS.SSS格式存储为字符串,或者以表示秒数的数值存储自1970-01-01 00:00:00 UTC起。请参阅SQLite.org上的date and time types。请注意,如果您使用的字符串表示形式是序列为年,月,日(在排序/查询此字符串字段时,此字母数字字符串将按年份排序,然后按月,然后按月排序,这是在做像你这样的查询时很关键。)

如果您确实将数据库中的日期存储为DD-MM-YYYY HH:MM:SS格式的字符串,则应考虑将保存值的格式更改为其中一种批准的日期格式。它会使与数据库的日期交互变得更加容易,从而允许您所要求的查询(尽管显然,DD-MM-YYYY替换为YYYY-MM-DD格式)。

答案 1 :(得分:0)

您已将字符串转换为日期

SELECT * FROM TRANSACTIONSHISTORY WHERE DATE between Datetime('29-01-2015 12:00:00') and Datetime('30-01-2015 00:00:00') AND USERID=abc

答案 2 :(得分:0)

第一个答案正是您所需要的。您在代码中所做的是使用ASCII值比较字符串。

我建议你使用linux时间戳,如:1453818208,这更容易保存和比较。此外,它总是可以翻译成人类可读的日期,如:29-01-2015 12:00:00。

SELECT * FROM TRANSACTIONSHISTORY WHERE DATE > "29-01-2015 12:00:00" AND DATE < "30-01-2015 00:00:00" AND USERID=abc

我希望这可以帮助你:)

答案 3 :(得分:-1)

尝试没有时间的第一次尝试,之后尝试日期和时间两者,希望我会为你工作

SELECT TRANSACTIONSHISTORY
FROM SHIPMENT 
WHERE DATE 
BETWEEN '11-15-2010' 
AND '30-01-2015'
// you can try this one  also
SELECT * FROM TRANSACTIONSHISTORY WHERE DATE BETWEEN "2011-01-11" AND "2011-8-11"