繁体   English   中英

如何使用sqlite获取一个月的数据? 如果没有特定日期的数据,那我希望在该位置上将零

[英]How to get data for a month using sqlite ? If there is no data for a specific date then i want zero on place of that

我已经知道如何获得一个月的数据? 使用此查询-

SELECT SLIDER_VALUE FROM TBL_ACTIVITY_TRACKS WHERE STRFTIME('%m', TRACK_DATE_TIME, 'localtime') = STRFTIME('%m', 'now', 'localtime');

Here TRACK_DATE_TIME is in yyyy-mm-dd date format.

但是我希望,如果没有特定日期的数据,那么我想要零或特定的标识符代替它。

我也知道我可以通过创建一个TBL_DATES来做到这一点。 它具有所有日期,然后将其与我的表连接起来,但是我不想创建一个新表。

我可以这样做吗?

您必须从某处获取各个日期值。 如果您不想创建临时表,则可以直接在语句中将值嵌入到子查询中:

SELECT IFNULL(Slider_Value, 'none')
FROM (SELECT '2013-10-01' AS Date
      UNION ALL
      SELECT '2013-10-02'
      UNION ALL
      SELECT '2013-10-03'
      UNION ALL
      ...
      SELECT '2013-10-31'
     ) AS ThisMonth
LEFT JOIN Tbl_Activity_Tracks ON ThisMonth.Date = date(Track_Date_Time)

如果您不希望在生成SQL语句的代码中枚举日期,也可以在SQL本身中进行适当的操作,以实现此目的:

SELECT IFNULL(Slider_Value, 'none')
FROM (SELECT date('now', 'start of month') AS Date
      UNION ALL
      SELECT date('now', 'start of month', '+1 days')
      UNION ALL
      SELECT date('now', 'start of month', '+2 days')
      UNION ALL
      ...
      UNION ALL
      SELECT date('now', 'start of month', '+27 days')
      UNION ALL
      SELECT date('now', 'start of month', '+28 days') WHERE strftime('%m', 'now', 'start of month', '+28 days') = strftime('%m', 'now')
      UNION ALL
      SELECT date('now', 'start of month', '+29 days') WHERE strftime('%m', 'now', 'start of month', '+29 days') = strftime('%m', 'now')
      UNION ALL
      SELECT date('now', 'start of month', '+30 days') WHERE strftime('%m', 'now', 'start of month', '+30 days') = strftime('%m', 'now')
     ) AS ThisMonth
LEFT JOIN Tbl_Activity_Tracks ON ThisMonth.Date = date(Track_Date_Time)

(后三个WHERE子句忽略了少于31天的月份中当月不再存在的天。)

您只需要在ArrayList中传递数据库查询返回值,然后获得 ArrayList size() 如果它大于零,则可以对其进行操作 ;否则, 如果没有数据,则可以传递零或进行相应的操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM