问题
Hi i want to add 01/01/1970 to a column ,datatype of last_hit_time_gmt is bigint ,when i run the below query i am getting data type
last_hit_gmmt
does not match a defined datatype name.
select
distinct STG.OMN_APND_KEY,
STG.last_hit_time_gmt,
IIF(STG.last_hit_time_gmt <>0,ADD_TO_DATE(TO_DATE('01/01/1970', 'DD/MM/YYYY'),'SS',cast(STG.last_hit_time_gmt as DATE ),NULL)
from EDW_STAGE_CDM_SRC.STG_OMNITUREDATA STG
WHERE
UPPER(STG_OMNITUREDATA.EVAR41) IN
('CONS_SUPP: CONSUMER','STORE','PURCHASE') and
STG.OMN_APND_KEY='61855975'
please help me..
回答1:
The query and data type is incompatible with Teradata.
- As stated in the comments you may want to use "CASE" instead of "IFF". The general format is
CASE WHEN *condition* THEN *result_if_true* ELSE *result_if_false* END as *ColumnName*
editing based on comment response
So in your query example the case statement can be used like...
select distinct STG.OMN_APND_KEY ,STG.last_hit_time_gmt ,CASE WHEN STG.last_hit_time_gmt = 0 THEN NULL ELSE DATE '1970-01-01' END AS YourColName FROM EDW_STAGE_CDM_SRC.STG_OMNITUREDATA STG WHERE UPPER(STG_OMNITUREDATA.EVAR41) IN ('CONS_SUPP: CONSUMER','STORE','PURCHASE') and STG.OMN_APND_KEY='61855975'
Also, if you are merely just trying to update the field STG.last_hit_time_gmt, why not just use two simple UPDATE statements?
UPDATE EDW_STAGE_CDM_SRC.STG_OMNITUREDATA SET STG.last_hit_time_gmt = DATE '1970-01-01' WHERE STG.last_hit_time_gmt <> 0 AND UPPER(STG_OMNITUREDATA.EVAR41) IN ('CONS_SUPP: CONSUMER','STORE','PURCHASE') AND STG.OMN_APND_KEY='61855975'; UPDATE EDW_STAGE_CDM_SRC.STG_OMNITUREDATA SET STG.last_hit_time_gmt = NULL WHERE STG.last_hit_time_gmt = 0 AND UPPER(STG_OMNITUREDATA.EVAR41) IN ('CONS_SUPP: CONSUMER','STORE','PURCHASE') AND STG.OMN_APND_KEY='61855975';
来源:https://stackoverflow.com/questions/33911820/how-to-add-date-in-teradata