如何在 Netezza 中声明变量?

how to declare a variable in Netezza?

我有一个 Netezza 查询,我在其中引用了一系列案例语句中的几个日期。我不想每次都替换所有这些日期,而是想在开头声明一个变量并在整个查询中使用它。在 SAS 中,我会这样做:

%LET end_p = '31DEC2014'd;

proc sql;
create table want as
select distinct id,

sum(case when (INCUR_DT) >= (&end_p-30) 
    and ip_op_cd = 'IP'
    then net_allow_at else 0 end) as ip_d_30,

sum(case when (INCUR_DT) >= (&end_p-90) 
    and ip_op_cd = 'IP'
    then net_allow_at else 0 end) as ip_d_90,

sum(case when (INCUR_DT) >= (&end_p-180)    
    and ip_op_cd = 'IP'
    then net_allow_at else 0 end) as ip_d_180,
...

遗憾的是,在 Netezza 中没有过程性 SQL 扩展允许您使用像这样的变量作为 SQL 语言本身的一部分。纯粹的 SQL 解决方案会涉及一些问题,例如加入 CTE 返回那个值。但是,NZSQL CLI 确实允许使用会话变量,Aginity Workbench.

也是如此。

一个使用 NZSQL 的例子。请注意内部单引号的转义以将变量用作文字。

TESTDB.ADMIN(ADMIN)=> \set TVAR '\'foo\''
TESTDB.ADMIN(ADMIN)=> select :TVAR;
 ?COLUMN?
----------
 foo
(1 row)
TESTDB.ADMIN(ADMIN)=> create table test_table (col1 bigint);
CREATE TABLE
TESTDB.ADMIN(ADMIN)=> insert into test_table values (123);
INSERT 0 1
TESTDB.ADMIN(ADMIN)=> \set TCOL 'COL1'
TESTDB.ADMIN(ADMIN)=> select :TCOL from test_table;
 COL1
------
  123
(1 row)

Aginity 会在看到 $var_name 时自动提示输入值,但至少据我所知,没有硬编码该变量定义的功能。