在teradata的商店持续时间

时间:2017-07-17 15:55:13

标签: sql teradata create-table

我获取的持续时间介于两个时间戳之间的源数据为

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)

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

请在此处提供正确的帮助。

提前致谢

1 个答案:

答案 0 :(得分:2)

这很棘手。

基于纯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不支持(不要问为什么),RegEx会添加缺少的零(当缺少秒时删除:ss部分格式):

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

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