【问题标题】:Is there a way to declare a date variable in PL/SQL SELECT有没有办法在 PL/SQL SELECT 中声明日期变量
【发布时间】:2016-05-04 00:00:07
【问题描述】:

我正在使用多个子查询从同一个表中提取多个日期范围内的数据。有没有办法设置日期变量,这样我就不必不断编辑日期范围?

例如:

Select A.Name,
    ,CASE
    WHEN B.WK1 IS NULL
    THEN 0
    ELSE B.WK1
    END as WK1

    ,CASE
    WHEN C.WK2 IS NULL
    THEN 0
    ELSE C.WK2
    END AS WK2

FROM

    (SELECT DISTINCT NAME
    FROM NAMES) A

    RIGHT OUTER JOIN
    (SELECT NAME,
    SUM(SALES) as WK1

    FROM SALES
    WHERE DATE between 1-JAN-2000 and 7-JAN-2000
    GROUP BY NAME) B
    ON NAME

    RIGHT OUTER JOIN
    (SELECT NAME,
    SUM(SALES) as WK2

    FROM SALES
    WHERE DATE between 8-JAN-2000 and 15-JAN-2000
    GROUP BY NAME) C
    ON NAME

基本上我想要做的是从一个日期开始滚动多周。

【问题讨论】:

  • 你使用什么工具来执行查询?
  • Bob - 我使用的是 Toad 11.6

标签: sql date plsql subquery


【解决方案1】:

只需将您的日期值替换为绑定变量(例如 :date1),如下所示。第一次运行查询时,Toad 会询问您这些变量的值。之后,Toad 会记住您输入的值,因此它将预先填充相同的值,因此您不必再次键入它们。您还需要确保选择正确的数据类型。

Select A.Name,
    ,CASE
    WHEN B.WK1 IS NULL
    THEN 0
    ELSE B.WK1
    END as WK1

    ,CASE
    WHEN C.WK2 IS NULL
    THEN 0
    ELSE C.WK2
    END AS WK2

FROM

    (SELECT DISTINCT NAME
    FROM NAMES) A

    RIGHT OUTER JOIN
    (SELECT NAME,
    SUM(SALES) as WK1

    FROM SALES
    WHERE DATE between :date1 and :date2
    GROUP BY NAME) B
    ON NAME

    RIGHT OUTER JOIN
    (SELECT NAME,
    SUM(SALES) as WK2

    FROM SALES
    WHERE DATE between :date3 and :date4
    GROUP BY NAME) C
    ON NAME 

【讨论】:

  • 谢谢 - 我会检查一下。出于好奇 - 如果我想更改日期,是否需要重新声明变量?因此,如果我想要一个月的前两周(1 月),而下一次运行脚本时,我想要前两周,比如说...2 月 - 我需要更改所有四个日期,对吗?
  • 变量不需要重新声明。下次运行时需要输入新值
  • 啊,好的。明白了。再次感谢。
猜你喜欢
  • 2018-03-07
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 2013-06-27
  • 1970-01-01
相关资源
最近更新 更多