我获取的持续时间介于两个时间戳之间的源数据为
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文件中),以便以正确的数据类型存储持续时间,以便我可以正确匹配开始和结束数据之间的差异?
请在此处提供正确的帮助。
提前致谢
答案 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并在插入期间应用强制转换。