如何在Netezza中声明变量?

时间:2015-01-05 17:00:50

标签: sql variables declaration 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,
...

1 个答案:

答案 0 :(得分:4)

不幸的是,Netezza中没有程序SQL扩展允许您将这样的变量用作SQL语言本身的一部分。纯粹的SQL解决方案将涉及kludges,例如加入返回该值的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时自动提示输入值,但是至少据我所知,没有硬编码该变量定义的功能。