根据sqlite中的天数获取日期,获取过去的7个日期和未来的14个日期

时间:2021-05-26 06:18:21

标签: sql sqlite

我们需要下表中过去的 7 个日期和未来的 14 个日期

天表

<头>
ID
2 星期日
3 周二
9 周三
10 星期五
8 星期四
4 星期六

现在我们根据当前日期获取未来 7 个日期

    SELECT CASE
           WHEN D.Day='Sunday' THEN date('now', 'localtime', 'weekday 0')
           WHEN D.Day='Monday' THEN date('now', 'localtime', 'weekday 1')
           WHEN D.Day='Tuesday' THEN date('now', 'localtime', 'weekday 2')
           WHEN D.Day='Wednesday' THEN date('now', 'localtime', 'weekday 3')
           WHEN D.Day='Thursday' THEN date('now', 'localtime', 'weekday 4')
           WHEN D.Day='Friday' THEN date('now', 'localtime', 'weekday 5')
           WHEN D.Day='Saturday' THEN date('now', 'localtime', 'weekday 6')
       END AS WeekDate
FROM Days AS D

但现在我们需要根据上表从当前日期获取过去的 7 个日期和未来的 14 个日期

1 个答案:

答案 0 :(得分:0)

你的做法是对的,解决方法也很简单。

select      date('now', 'localtime', 'weekday 0', '-14 days') as 'Sunday2weeks',
date('now', 'localtime', 'weekday 0', '-7 days') as 'Last Sunday',  
date('now', 'localtime', 'weekday 0') as 'Next Sunday'

今天(2021-05-26)它回来了

Sunday2weeks    Last Sunday    Next Sunday
2021-05-16      2021-05-23     2021-05-30

这是有效的,因为 according to SQLite docs 您可以使用零个或多个修饰符。顺序很重要。

从这里开始,修改您的查询应该相当简单。

编辑:

像这样的东西??

SELECT 
       CASE
           WHEN D.X='SUN' THEN date('now', 'localtime', 'weekday 0')
           WHEN D.X='MON' THEN date('now', 'localtime', 'weekday 1')
           WHEN D.X='TUE' THEN date('now', 'localtime', 'weekday 2')
       END AS WeekDate,

       CASE
           WHEN D.X='SUN' THEN date('now', 'localtime', 'weekday 0', '-7 days')
           WHEN D.X='MON' THEN date('now', 'localtime', 'weekday 1', '-7 days')
           WHEN D.X='TUE' THEN date('now', 'localtime', 'weekday 2', '-7 days')
       END AS LastWeek,

       CASE
           WHEN D.X='SUN' THEN date('now', 'localtime', 'weekday 0', '+14 days')
           WHEN D.X='MON' THEN date('now', 'localtime', 'weekday 1', '+14 days')
           WHEN D.X='TUE' THEN date('now', 'localtime', 'weekday 2', '+14 days')
       END AS Plus2Weeks
       
FROM B AS D

--- returns for 26.may 2021

WeekDate    LastWeek    Plus2Weeks
-----------------------------------
2021-05-30  2021-05-23  2021-06-13
2021-05-31  2021-05-24  2021-06-14
2021-06-01  2021-05-25  2021-06-15