sqlite - 计算当月星期几的第一天和最后一天

标签 sqlite datetime calculator

我想给定当前日期时间,计算当前月份的一周的第一个日期和最后一个日期。

例如,2017年12月1日是第一天,2017年12月2日是该月12月月份的一周的最后一天。在一年的同一周,2017年11月26日是一周的第一天,
2017年11月30日是上个月的最后一天。

因此,如果今天是2017年12月1日,我应该从当前日期时间获得01-02,而不是26-02范围。

PS:我正在尝试在Sqlite查询中执行此操作。我想每周对一些值进行分组。星期几应属于当月。因此,这一要求。到目前为止,这是我的查询。

SELECT SUM(amount) as Y,
strftime('%d', datetime(createdOn/1000, 'unixepoch'), '-'||strftime('%w', datetime(createdOn/1000, 'unixepoch'))||' day' )
||'-'||
strftime('%d', datetime(createdOn/1000, 'unixepoch'), '+'||(6-strftime('%w', datetime(createdOn/1000, 'unixepoch')))||' day' )                 AS X
FROM my_table
GROUP BY strftime('%d', datetime(createdOn/1000, 'unixepoch'), '-'||strftime('%w', datetime(createdOn/1000, 'unixepoch'))||' day' )
||'-'||
strftime('%d', datetime(createdOn/1000, 'unixepoch'), '+'||(6-strftime('%w', datetime(createdOn/1000, 'unixepoch')))||' day' ) 


如何做到这一点;给定当前日期时间。

最佳答案

Common table expressions对于保持中间结果很有用:

WITH t1 AS (
  SELECT amount, date(createdOn / 1000, 'unixepoch', 'localtime') AS date
  FROM my_table
),
t2 AS (
  SELECT *,
         date(date, 'weekday 6') AS end_of_week,
         date(date, 'weekday 6', '-6 days') AS start_of_week
  FROM t1
),
t3 AS (
  SELECT *,
         strftime('%m', date         ) AS month,
         strftime('%m', start_of_week) AS sowk_month,
         strftime('%m', end_of_week  ) AS eowk_month,
         date(date, 'start of month') AS start_of_month,
         date(date, '+1 month', 'start of month', '-1 day') AS end_of_month
  FROM t2
),
t4 AS (
  SELECT *,
         CASE WHEN sowk_month = month THEN start_of_week
                                      ELSE start_of_month
         END AS week_in_month_start,
         CASE WHEN eowk_month = month THEN end_of_week
                                      ELSE end_of_month
         END AS week_in_month_end
  FROM t3
),
t5 AS (
  SELECT amount,
         week_in_month_start || '-' || week_in_month_end AS week_in_month
  FROM t4
)
SELECT SUM(amount) AS Y,
       week_in_month
FROM t5
GROUP BY week_in_month;

关于sqlite - 计算当月星期几的第一天和最后一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47721347/

相关文章:

PHP - 两个日期之间的奇怪秒数差异(90000 而不是 86400)

javascript - 不允许转换为 future 年份 moment.js

Javascript moment.js - 西类牙语日期和时间

c++ - 错误 : declaration of C function conflicts with previous declaration

java - 引用通过方法分配的按钮的名称

.net - Sqlite 删除速度非常慢 - 如何加快速度?

android - 外部 SQLite 文件内容访问错误

ruby-on-rails - 即使查询正确,Activerecord也无法按属性查找模型

php - sqlite php 获取无法识别的 token : ":" error while inserting and parameterized query

java - 使用 ActionListener 时内部类中的静态声明非法