【问题标题】:how to add date in Teradata?如何在 Teradata 中添加日期?
【发布时间】:2016-02-27 23:11:30
【问题描述】:

您好,我想将 01/01/1970 添加到列中,last_hit_time_gmt 的数据类型是 bigint,当我运行以下查询时,我正在获取数据类型

last_hit_gmmt

与定义的数据类型名称不匹配。

   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'

请帮帮我..

【问题讨论】:

  • 如果 IIF() 是伪代码或不同 RDBMS 的代码,您的使用。我不相信 Teradata 支持 IIF()。
  • 谢谢 Rob,所以我应该使用 case 语句...如果可以,请您写下...以及如何将该列转换为日期

标签: date teradata


【解决方案1】:

查询和数据类型与 Teradata 不兼容。

  • 如 cmets 中所述,您可能希望使用“CASE”而不是“IFF”。一般格式为
CASE WHEN *condition* THEN *result_if_true* 否则 *result_if_false* END 为 *ColumnName*

根据评论回复进行编辑

所以在您的查询示例中,case 语句可以像...一样使用。

选择不同的 STG.OMN_APND_KEY ,STG.last_hit_time_gmt ,情况当 STG.last_hit_time_gmt = 0 THEN NULL 其他日期“1970-01-01” END AS YourColName FROM EDW_STAGE_CDM_SRC.STG_OMNITUREDATA STG WHERE UPPER(STG_OMNITUREDATA.EVAR41) 在 ('CONS_SUPP: CONSUMER','STORE','PURCHASE') 和 STG.OMN_APND_KEY='61855975'

另外,如果您只是想更新字段 STG.last_hit_time_gmt,为什么不只使用两个简单的 UPDATE 语句?

更新 EDW_STAGE_CDM_SRC.STG_OMNITUREDATA SET STG.last_hit_time_gmt = DATE '1970-01-01' STG.last_hit_time_gmt 0 和上(STG_OMNITUREDATA.EVAR41)在 ('CONS_SUPP:消费者','商店','购买') 和 STG.OMN_APND_KEY='61855975'; 更新 EDW_STAGE_CDM_SRC.STG_OMNITUREDATA SET STG.last_hit_time_gmt = NULL STG.last_hit_time_gmt = 0 和上(STG_OMNITUREDATA.EVAR41)在 ('CONS_SUPP:消费者','商店','购买') 和 STG.OMN_APND_KEY='61855975';

【讨论】:

  • 我正在尝试将日期 01/01/1970 添加到列 last_hit_gmmt 如果列值 last_hit_gmmt 不等于 0 如果它是 0 然后值填充为 NULL...跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 2017-03-10
相关资源
最近更新 更多