首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在普及SQL中获取日期列表

如何在普及SQL中获取日期列表
EN

Stack Overflow用户
提问于 2021-12-06 13:41:12
回答 1查看 151关注 0票数 0

我们的考勤数据库是一个普适/Actian数据库。我想要做的是创建一个查询,它只列出了接下来的14天。然后,我将将此日期列表与员工记录交叉应用,以便有效地列出今后14天的人员/日期列表。

我很容易在SQL服务器上使用递归的CTE来完成这个任务。我也可以在Server中使用一个循环来完成这个任务,但是我无法用普适SQL解决这个问题。循环只能存在于存储过程和触发器中。

环顾四周,我认为我找到并修改的这段代码可能会起作用,但它不起作用(而且进一步的研究表明,在普适的环境中根本没有递归选项。

代码语言:javascript
复制
WITH RECURSIVE cte_numbers(n, xDate) 
AS (
     SELECT 
           0, CURDATE() + 1
     UNION ALL
    SELECT 
     n+1, 
     dateAdd(day,n,xDate) 
    FROM 
     cte_numbers 
    WHERE n < 14
)
SELECT 
     xDate 
FROM 
cte_numbers;

我只是想知道是否有人可以帮助我编写一个SQL查询,在存储过程之外为我提供这个日期列表。

EN

回答 1

Stack Overflow用户

发布于 2021-12-11 16:18:42

创建这样的表时:

代码语言:javascript
复制
CREATE TABLE dates(d DATE PRIMARY KEY, x INTEGER);

并创建这样的第一张记录:

代码语言:javascript
复制
INSERT INTO dates VALUES ('2021-01-01',0);

然后,您可以使用这个语句,每次执行该语句时,都会加倍dates中的记录数。(所以你需要运行几次

当您运行它10次时,表dates将有21个oktober 2023作为最后一个日期。当你运行12次时,最后一次约会将是2032年3月19日。

代码语言:javascript
复制
INSERT INTO dates 
   SELECT 
      DATEADD(DAY,m.m+1,d),
      x+m.m+1 
   from dates
   cross join (select max(x) m from dates) m
   order by d;

当然,可以用next语句删除列x (可选),但不能使用前面的语句添加更多记录:

代码语言:javascript
复制
ALTER TABLE dates DROP COLUMN x;

最后,从今天起的14天内返回:

代码语言:javascript
复制
SELECT d 
FROM DATES 
WHERE d BETWEEN CURDATE( ) AND DATEADD(DAY,13,CURDATE());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70246426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档