首页 > 解决方案 > Oracle SQL 中需要 12 个未来数字

问题描述

我在 SQL 中有一个要求,我们有几个市场 id 比如说 20、30、40

在这里,对于使用一个 plsql 函数的每个市场,我们得到一个活动编号,假设市场 20 我得到 20210306,mrkt 30 我们得到 20210307,40 mrkt id 20210308。

现在我想为每个市场实现我们应该有当前的活动编号为 20210306 以及 12 个未来的活动应该基于市场的每个当前活动通过 SQL 查询产生。

我正在使用 union all 和 campaign+1,2,3 等等,这需要时间。我们是否有一些简短的逻辑。

请建议谢谢,维杰

标签: sqloracleoracle11goracle10g

解决方案


LEVEL您可以使用带有CONNECT BY子句的伪列生成一系列数据(数字或日期甚至字符) 。在您的情况下,听起来您希望从 20210306 开始生成接下来的 10 个数字。可以这样做:

WITH current_campaign ( nr ) AS 
( SELECT 20210306 FROM dual )
SELECT
  nr + level
  FROM
  current_campaign
CONNECT BY
  level < 13;

  20210307
  20210308
  20210309
  20210310
  20210311
  20210312
  20210313
  20210314
  20210315
  20210316
  20210317
  20210318

20210306 也可以表示 2021 年 3 月 6 日的日期。如果您想生成这些数字,也可以基于日期生成。例如(从 0629 开始所以结果显示月份变化,只显示 5 行)

WITH current_campaign ( cdate ) AS 
( SELECT DATE'2021-06-29' FROM dual ) SELECT
  TO_CHAR(cdate + level,'YYYYDDMM')
  FROM
  current_campaign
CONNECT BY
  level < 6;    

20213006
20210107
20210207
20210307
20210407
 

推荐阅读