2017-07-17 57 views
1

我越来越有2个时间戳之间的时间源数据店持续时间的Teradata

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数据库存储在正确的数据类型持续时间,所以我可以正确匹配开始和结束数据之间的区别吗?

请在这里帮助正确的做法。

在此先感谢

+1

持续时间是否包括小时和分钟?最长持续时间是多少?如何开始和结束格式化,在你的例子中没有秒,但持续时间? – dnoeth

+0

@dnoeth:是的,先生,我已经要求这个来源系统,在开始和结束日期没有秒他们会添加它,请考虑秒截至目前。数据包括23小时32分钟等字段。 8秒。和像0小时0分钟的字段。 4秒。 'h''min。''和'秒'。包含在'。'中并且数据是否为'0',其中h,min总是包含的。 - –

回答

2

这非常棘手。

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

这将修改你的持续时间分成(应被定义为INTERVAL HOUR(4) TO SECOND(0)目标列),它可以通过删除不必要的字符传递给to_dsinterval除了HMS格式

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

你输入时间戳显示个位数日/月,它的Teradata不支持(不AKS为什么),正则表达式将那些缺少零(当秒缺少删除格式的:ss部分):

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

最后将持续时间&时间戳记作为VarChars并在插入期间应用Casts。

+0

@ doneth谢谢,我会检查并通知你。 –

+0

@doneth:像预期的那样工作,并学习了很多这个to_dsinterval函数。再次感谢。 –