我有一个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并返回该值。但是,NZSQLCLI确实允许使用会话变量,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时,它将自动提示输入值,但是至少就我所知,没有功能可以硬编码该变量定义。