我在表格中有两个日期列(SQLITE)
现在我需要的是找到这两个日期之间每个季度出现的天数
For example let's say,
start_Date = 12-Jan-2015
end_Date = 13-Jul-2015
So result should be like:
Quarter 1 = 79 days
Quarter 2 = 91 days
Quarter 3 = 13 days
Quarter 4 = 0 days
我试过下面的查询
SELECT CASE WHEN cast(strftime('%%m', end_date) as integer) BETWEEN 1 AND 3 THEN 'Q1' WHEN cast(strftime('%%m', end_date) as integer) BETWEEN 4 and 6 THEN 'Q2' WHEN cast(strftime('%%m', end_date) as integer) BETWEEN 7 and 9 THEN 'Q3' ELSE 'Q4' END as Quarter, sum(julianday(end_date) - julianday(start_date) + 1) AS Total FROM table WHERE end_date BETWEEN '2015-01-01 00:00:00' AND '2015-12-31 00:00:00' GROUP BY Quarter
但问题是它会在考虑end_date的季度显示所有日子。因此,如果end_date的月份为4,则所有日期将显示在第3季度。
欢迎任何建议。要么是sqlite查询,要么是ios SDK或两者都使用。在任何情况下都可能。
...谢谢!!
答案 0 :(得分:1)
这在SQL中很难做到,但鉴于您使用NSDateComponents
标记了这一点,看起来您已经了解了所需的基本技术。使用NSDateComponents
提供的NSCalendar
方法:
使用component:fromDate:
获取年份。
使用月份1,日期1和之前确定的年份并调用dateFromComponents:
来计算Q1的开始。
现在循环:
使用dateByAddingUnit
(或dateByAddingComponents
,如果您需要支持较旧的操作系统版本),在季度开始时添加三个月来计算下一季度的开始。
查看开始日期和结束日期,将它们与季度的开始和结束进行比较,以确定此特定季度发生的天数(您可以使用components:fromDate:toDate:options:
来计算天数)。
在下一季度重复此操作。
这些是基本步骤。