生成日期列之间的日期

Generate dates between to date columns

我正在尝试编写一个函数来填充临时文件 table。这个临时 table 将由我在名为 'Orders' 的 table 中的行填充(临时 table 和订单共享相同的列名)。 Orders 中的行是 Item、Location、Qty、SendDate 和 EndDate(SendDate 和 EndDate 的格式为 'yyyymmdd')。需要计算 SendDate 和 Enddate 之间的差值,并根据日期差分摊数量。示例:一行的数量为 200,SendDate 为 3/16,EndDate 为 3/20,该函数需要使用 3/16-3/20 的行填充 temp table数量 40.

Sample Data:
- Item    Location  Qty   SendDate    EndDate
 -Toy     Store     200    20150316    20150320

Desired result: 
 - Item    Location  Qty   SendDate    EndDate
  -Toy     Store     40    20150316    20150320
  -Toy     Store     40    20150317    20150320
  -Toy     Store     40    20150318    20150320
  -Toy     Store     40    20150319    20150320
  -Toy     Store     40    20150320    20150320

我是游标语句的新手,所以我不确定如何尝试。提前谢谢你。

在普通 table 表达式中使用 UNION ALL 可以为您提供所需的内容。

我不熟悉 Oracle 的日期操作,但这样的方法可以工作:

WITH x ( d ) AS (
    SELECT TO_DATE('2014-12-25', 'yyyy-mm-dd')
    FROM   dual
    UNION ALL
    SELECT d + interval '1' day
    FROM   x
    WHERE  d < TO_DATE('2014-12-31', 'yyyy-mm-dd')
)
SELECT *
FROM   x

您可以使用 CONNECT BY 子句:

WITH YOUR_TABLE (Item,Location,Qty,SendDate,EndDate)
     AS (SELECT 'Toy','Store',200,20150316,20150320 FROM DUAL) -- sample data
    SELECT item,
           location,
           qty,
           TO_NUMBER (
              TO_CHAR (TO_DATE (senddate, 'yyyymmdd') + LEVEL - 1, 'yyyymmdd'))
              senddate,
           enddate
      FROM YOUR_TABLE
CONNECT BY LEVEL<=(TO_DATE(enddate,'yyyymmdd') - TO_DATE(senddate,'yyyymmdd')) + 1;