【问题标题】:Query last day, last week, last month SQLite查询最后一天、上周、上个月SQLite
【发布时间】:2012-05-08 18:21:48
【问题描述】:

我的 Android SQLite DB 中有这张表:

CREATE TABLE statistics (subject TEXT, hits INTEGER, fails INTEGER, date DATE)

date 字段在每个寄存器中存储datetime('now', 'localtime')

现在我必须查询最后一天、上周和上个月的寄存器以显示一些统计信息。 我一直在尝试这样的事情

    SELECT Timestamp, datetime('now', '-1 week') FROM statistics WHERE TimeStamp < datetime('now', '-1 week') 

还有这个

    SELECT * FROM statistics WHERE date BETWEEN datetime('now', localtime') AND datetime ( 'now', '-1 month')

并且不起作用:(

我该怎么做?

我可以通过在虚拟设备模拟器中简单地转发日期来检查查询是否正常吗?

谢谢!

【问题讨论】:

  • 这里有一个提示。该月的最后一天是从下个月的第一天开始的 -1。
  • 谢谢@JonH。我找到了解决方案,但我暂时无法发布。在几个小时内你们所有人都会拥有它:)

标签: database sqlite datetime


【解决方案1】:

我找到了这个解决方案。我希望它对你有用。

最后一天:

SELECT * FROM statistics WHERE date BETWEEN datetime('now', 'start of day') AND datetime('now', 'localtime');

上周:

SELECT * FROM statistics WHERE date BETWEEN datetime('now', '-6 days') AND datetime('now', 'localtime');

上个月:

SELECT * FROM statistics WHERE date BETWEEN datetime('now', 'start of month') AND datetime('now', 'localtime');

【讨论】:

  • -6 days 没有空格!不能编辑,它说编辑必须至少有 6 个字符
  • 至少在 sqlite 3.9.1 中,'now', 'start...' 之间缺少 'localtime' 可能会导致意外行为。以datetime('now', 'localtime', 'start of day') 为例。
【解决方案2】:

这段代码应该能让你上个月

SELECT * 
FROM statistics 
WHERE date >= date('now','start of month','-1 month')
AND date < date('now','start of month')

【讨论】:

    【解决方案3】:
    SELECT * 
    FROM statistics 
    WHERE date >= date('now','start of month','-1 months')
    AND date < date('now','start of month')
    

    更多的月份是“months”,而不是像其他人之前所说的month

    【讨论】:

      【解决方案4】:

      此代码有望带来前一周的记录

      SELECT  * FROM  order_master
      WHERE strftime('%Y-%m-%d',om_date) >= date('now','-14 days') AND 
      strftime('%Y-%m-%d',om_date)<=date('now') order by om_date LIMIT 6
      

      【讨论】:

      • 前一周还是前 两周 周?
      【解决方案5】:
      SELECT 
      max(date(date, 'weekday 0', '-7 day')) WeekStart,
      max(date(date, 'weekday 0', '-1 day')) WeekEnd,date 
      FROM table;
      

      【讨论】:

        【解决方案6】:

        您可以创建一个日历,然后从中获取时间戳

        final Calendar todayCalendar = Calendar.getInstance();
        final long todayTimestamp = todayCalendar.getTime().getTime();
        todayCalendar.add(Calendar.DAY_OF_YEAR, -7);
        final long aWeekAgoTimestamp = todayCalendar.getTime().getTime();
        final String selection = TABLE_COLUMN_DATE_CREATED + " BETWEEN " + aWeekAgoTimestamp + " AND " + todayTimestamp;
        

        【讨论】:

          猜你喜欢
          • 2011-08-17
          • 2021-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-07
          • 2010-12-25
          • 1970-01-01
          相关资源
          最近更新 更多