【问题标题】:Matching date format in Teradata YYYY-MM-DDTeradata YYYY-MM-DD 中的匹配日期格式
【发布时间】:2016-01-20 21:33:59
【问题描述】:

我对 Teradata 还很陌生。我在源中有一个交易日期列,其中包含一些有效和无效的值。我需要做的是获取格式为 YYYY-MM-DD HH:MM:SS.SSSSSS 的有效值,并将 null 传递给所有无效值的目标

转换规则是:如果格式为YYYY-MM-DD HH:MM:SS.SSSSSS,则将源移动到目标,否则将空移动到目标。

【问题讨论】:

  • 发布一些有效和无效的行。这将有助于给出正确的答案。

标签: validation date pattern-matching teradata


【解决方案1】:

只需将left joinSys_Calendar tables 放在您的专栏中,并在SEL 部分使用COALESCE 即可。

如果您仍有问题,请将您的日期转换为与 sys calendar 匹配的格式。 无效日期将返回为NULL

【讨论】:

  • 所以查询有效,但我有一个小问题,我的日期列在源代码中定义为 char,所以当我在加入其返回的垃圾值而不是有效日期后运行查询时
  • 嗨 Juvelle,请使用 cast(column as date format 'YYYY-MM-DD HH:MM:SS') 将字符转换为日期,然后进行连接。理想情况下,如果您有大量数据,最好借助临时表并将数据类型预先转换为最新。然后对临时表和系统日历执行联接。如果您需要我们进行调查,请发布您的查询。
  • sel a.datecol FROM mydatabase.mytable A LEFT OUTER JOIN SYS_CALENDAR.CALENDAR CAL ON (CALENDAR_DATE(FORMAT 'YYYY-MM-DD')(char(20)))=A.datecol跨度>
  • sel cast(datecol as date format 'yyyy-mm-dd') FROM mydatabase.mytable A LEFT OUTER JOIN SYS_CALENDAR.CALENDAR CAL ON (CALENDAR_DATE(FORMAT 'YYYY-MM-DD')(char (20)))=A.datecol 我投了它抛出一个错误,上面写着“无效日期”
  • 我认为你的意思是整个行也有其他不满足条件的值。让我们使用以下策略:创建临时表 mytable1 作为 select * from mydatabase.mytable where char_length(datecol) = 10 and substr(datecol,5,1) = "-" and substr(datecol,8,1) = "-"和 transcode='detail' 和 transname='model';现在使用临时表作为参考。使用合并将源中任何不匹配的记录转换为所需的值。选择 coalesce(stg.datecol,'NULL') as datecol, stg.* from mytable as src left outer join mytable1 as tmp1 on src.datecol = tmp1.datecol;
猜你喜欢
  • 2017-07-10
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多