更新每个单独的记录而不是整个表

时间:2013-08-26 23:55:37

标签: sql teradata

我加载了一个包含默认时间戳列的表,如'1900-01-01 00:00:00'。表结构很简单

PARTID|GMT_TMSTMP|PAC_TMSTMP

但我需要根据GMT时间内另一列的值将这些时间戳值更改为美国太平洋时间。

我找到了一种方法来为一条记录做到这一点

UPDATE STG SET PAC_TMSTMP=CAST(GMT_TMSTMP AS TIMESTAMP(0)) AT TIME ZONE 'America Pacific' WHERE PARTID='0369526767';

该表包含超过一百万条记录,我认为自我加入,我可以像这样更新每条记录

UPDATE    STG      SET
PAC_TMSTMP =CAST(GMT_TMSTMP AS TIMESTAMP(0)) AT TIME ZONE 'America Pacific'
FROM    STG  A    JOIN    STG  B    ON      A.PARTID = B.PARTID

Teradata给了我一个错误,并在FROM关键字之前排除了一些东西。我显然很混乱。

可以这样做吗?

1 个答案:

答案 0 :(得分:1)

这将执行单个表更新,以根据同一个表中的另一列设置一个列的值:

 UPDATE STG
    SET PAC_TMPSTMP = CAST(GMT_TMSTMP AS TIMESTAMP(0)) --AS TIME ZONE 'America Pacific";

这将需要暂时的日记功能,如果这是您不止一次的事情,您可能希望考虑查看MERGE语句作为替代。