在teradata中声明变量

时间:2017-04-19 16:26:12

标签: tsql teradata

在TSql中我可以像这样定义一个变量:

DECLARE @Threshold AS int;
SET @Threshold = 5;

我可以这样使用它:

,COALESCE(
    CASE WHEN X >= @Threshold THEN A ELSE NULL END
    ,CASE WHEN Y >= @Threshold THEN B ELSE NULL END
) AS Bla

类似于TeraData

2 个答案:

答案 0 :(得分:3)

将变量加载到CTE并在SELECT语句中引用CTE非常常见:

WITH variables AS
(
    SELECT 5 as thresholdmin, 10 as thresholdmax
)
SELECT CASE WHEN 6 BETWEEN thresholdmin and thresholdmax then 1 ELSE 0 END as thresholdCheck 
FROM variables

您可以将CTE交叉连接到其他表(或派生表)中,并使其与上面的Volatile表答案非常相似,但不会产生实际存储空间。

使用sys_calendar的示例:

WITH variables AS
(
    SELECT DATE '2016-01-01' as minDate, DATE '2016-01-31' as maxDate
)
SELECT cal.calendar_date 
FROM sys_calendar.calendar cal, variables
WHERE cal.calendar_date BETWEEN variables.minDate and variables.maxDate
ORDER BY cal.calendar_date

这是一个很好的解决方案,因为它可以在任何支持CTE的RDBMS上工作(所以除了mysql之外的所有内容--UPDATED-- mysql 8.0+现在都支持CTE!)。

答案 1 :(得分:0)

您无法在典型的Teradata sql脚本中创建变量。而是创建一个易失性表并存储"变量"的值。在表中。然后在需要使用它时从volatile表中查询该值。它看起来像这样:

CREATE VOLATILE TABLE MyVariable
(
VariableValue int
) Primary index (VariableValue)
ON COMMIT PRESERVE ROWS;

INSERT INTO MyVariable(VariableValue)
VALUES (5);

SELECT COALESCE(
    CASE WHEN X >= VariableValue THEN 'A' ELSE NULL END
    ,CASE WHEN Y >= VariableValue THEN 'B' ELSE NULL END
) 
FROM YourTable, MyVariable;

如果您决定将逻辑放在存储过程中,那么可以DECLARE个变量。

以下是实际的变量声明规则: http://info.teradata.com/htmlpubs/DB_TTU_15_00/index.html#page/SQL_Reference/B035_1148_015K/ch08.143.035.html#ww593657