暂无图片
PG TIMESTAMP加上分钟数
我来答
分享
Thomas
2024-04-10
PG TIMESTAMP加上分钟数

postgres=# select * from taa;
work_time
---------------------
2024-04-09 09:02:00
(1 row)

postgres=# select * from tab;
nm
----
1
2
3
4
5
6
7
8
9
10
(10 rows)

TAB表的WORK_DATE为TIMESTAMP类型,TAB的NM为INTEGER。现在想两表JOIN,得到

2024-04-09 09:03:00

2024-04-09 09:04:00

.。。。。。

2024-04-09 09:12:00

即将WORK_DATE每次网上加一分钟,SQL怎么写

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
星星之火
WITH RECURSIVE seq AS (  
  SELECT current_timestamp AS ts, 1 AS cnt  
  UNION ALL  
  SELECT ts + interval '2 minutes', cnt + 1  
  FROM seq  
  WHERE cnt < 10  
)  
SELECT cnt,ts FROM seq;
  1. WITH RECURSIVE 语句定义了一个名为 seq 的递归公共表表达式 (CTE)。
  2. CTE 的第一个 SELECT 语句返回当前时间戳作为 ts 和一个计数器 cnt 初始化为 1。
  3. 第二个 SELECT 语句是递归部分,它返回前一条记录的 ts 加上 2 分钟的间隔,并将计数器 cnt 增加 1。
  4. WHERE 子句确保递归只进行 9 次(因为我们已经有了一个初始记录,所以总共是 10 条记录)。
  5. 最后,我们从 seq CTE 中选择 ts 列。
暂无图片 评论
暂无图片 有用 1
暂无图片
星星之火


暂无图片 评论
暂无图片 有用 0
Thomas

我原本想法,是两表做CROSS JOIN,tab表里存储每行要加的分钟数,这样得到结果是

2024-04-09 09:02:00+1分钟

2024-04-09 09:02:00+2分钟

。。。

2024-04-09 09:02:00+10分钟

但似乎PG只能是这种方式:+ interval 'xx minutes'? 也就是xx的值我无法动态赋予。你说的CTE方式挺好的。牛!

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏