【问题标题】:Generate SQL for datetime in loop在循环中为日期时间生成 SQL
【发布时间】:2021-02-28 09:17:05
【问题描述】:

这里我想循环打印日期。

DO $$
DECLARE counter INTEGER := 0 ; 
DECLARE interval_days TIMESTAMP;
BEGIN
   WHILE counter <= 5 LOOP
      counter := counter + 1 ; 
      interval_days := NOW() - INTERVAL '2 DAY';
      RAISE NOTICE '%', interval_days;
   END LOOP ; 
END; $$

在上面的代码中,我想打印这样的东西。

2020-11-16 12:11:43.741087
2020-11-15 12:11:43.741087
2020-11-14 12:11:43.741087
不同天间隔的日期。 2天不固定。

【问题讨论】:

标签: sql postgresql plpgsql


【解决方案1】:

你必须稍微修改你的代码:

DO $$
DECLARE
   counter INTEGER := 0; 
   interval_days TIMESTAMP := current_timestamp;
BEGIN
   WHILE counter <= 5 LOOP
      counter := counter + 1; 
      interval_days := interval_days - INTERVAL '1 DAY';
      RAISE NOTICE '%', interval_days;
   END LOOP; 
END;$$;

但是你可以得到同样的结果

SELECT *
FROM generate_series(
        current_timestamp - INTERVAL '1 DAY',
        current_timestamp - INTERVAL '6 DAY',
        INTERVAL '-1 DAY'
     );

【讨论】:

  • 谢谢,Laurenz,a_horse_with_no_name 我找到了解决方案。但我的问题是这个数字不是串联的。其中计数器可以是任何其他数字,不需要在一个系列中。
  • @codebuzzz 什么是“其他”数字,当您在代码中增加相同的天数时?如果您在两者之间生成一个随机数并且需要将整数转换为区间,请使用例如make_interval(days := &lt;num_days&gt;)interval '1 day'*&lt;number&gt;,因为我在问题的评论中建议您回答。
  • @astentx 这个问题不太清楚。我解释说间隔可能会改变,但对于一个查询来说总是相同的。在这种情况下,您只需更改我的代码中的间隔,例如使用函数。如果间隔随单个查询而变化,则需要描述该信息的来源。
  • @LaurenzAlbe 没错,这也是我的假设。这就是为什么我问 OP 如何获得这些数字,以便您的答案可以被接受或改进。
  • @astentx 无论如何,看起来这个问题已经被放弃了。让我们关闭它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 2021-12-19
相关资源
最近更新 更多