【问题标题】:store duration in teradata在 teradata 中存储持续时间
【发布时间】:2017-07-17 15:55:13
【问题描述】:

我正在获取持续时间在 2 个时间戳之间的源数据

Duration            Start date          End date        Start station
14h 26min. 2sec.    12/31/2010 23:49    1/1/2011 14:15  10th & U St NW (31111)

如何将这些数据(在 CSV 文件中)导入 Teradata 数据库,以正确的数据类型存储持续时间,以便将其与开始数据和结束数据之间的差异正确匹配?

请在此处帮助正确的方法。

提前致谢

【问题讨论】:

  • 持续时间是否总是包括小时和分钟?最长持续时间是多少? start&end 的格式如何,您的示例中没有秒数,而是持续时间?
  • @dnoeth :是的,先生,我已经向源系统询问过,他们将添加它的开始和结束日期没有秒数,请考虑现在的秒数。数据包括 23h 32min 等字段。 8秒。和 0h 0min 之类的字段。 4秒。用“h”“分钟”。和“秒”。包含在“.”中是的,数据为“0”,没有值,h,min sec 始终包括在内。 ——

标签: sql teradata create-table


【解决方案1】:

这很棘手。

纯基于 SQL 的解决方案(没有 ETL 工具的功能)需要生成可以安全转换的数据。

这会将您的持续时间修改为可以传递给to_dsinterval的格式,方法是删除除HMS之外的不必要字符(目标列应定义为INTERVAL HOUR(4) TO SECOND(0))

Cast(to_dsinterval('PT'||Upper(OTranslate(duration, ' in.ec', ''))) AS INTERVAL HOUR(4) TO SECOND(0))

您的输入时间戳显示 Teradata 不支持的单个数字日/月(不知道为什么),正则表达式会添加那些缺失的零(当秒数缺失时,请删除格式的 :ss 部分):

Cast(RegExp_Replace(start_date, '\b([0-9])\b', '0\1') AS TIMESTAMP(0) Format 'mm/dd/yyyyBhh:mi:ss')

最后将持续时间和时间戳作为 VarChars 传递,并在插入期间应用强制转换。

【讨论】:

  • @doneth:按预期工作,并在这个 to_dsinterval 函数中学到了很多东西。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
相关资源
最近更新 更多