微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Teradata中将字符串转换为日期的问题

如何解决Teradata中将字符串转换为日期的问题

teradata 相对较新。我有一个表格,它似乎是从 Excel 导入的,所有内容都作为字符。我正在尝试将字符时间戳转换为时间戳或日期——只要我可以计算时间间隔(天、月、年)我并不真正关心最小错误(1 天)并不大在这种情况下处理。

它们当前的格式为 MM/DD/YYYY HH:MM:SS AM/PM,但在 1 月至 9 月的几个月中,它们缺少前导 0。例如,

2020/6/3 下午 5:19:11

11/13/2020 上午 11:37:12

这会导致 TO_DATE(仅提取日期部分时)和 TO_TIMESTAMP 等函数出现问题。我用谷歌搜索并查看了 stackoverflow,虽然我找到了答案,但我很惊讶我没有找到任何对我的情况有帮助的(这不可能是独一无二的)。

这是我尝试过的和得到的:

TO_DATE(TRIM(SUBSTR(ACTVTY_TIMESTAMP,LENGTH(ACTVTY_TIMESTAMP) - 10))) AS newdate

作为单个语句执行。失败 [9134 : HY000] YYYY 值必须是四位数字并且在 1-9999 范围内

TO_DATE(TRIM(SUBSTR(ACTVTY_TIMESTAMP,LENGTH(ACTVTY_TIMESTAMP) - 10)),'MM/DD/YYYY') AS newdate

作为单个语句执行。失败 [9134 : HY000] 月份必须是两位数

我见过一些类似的情况,人们建议使用 case when 语句或正则表达式。我认为必须有一个简单的解决方案,因为这似乎很常见。

我非常感谢任何人可以提供的任何指导。

非常感谢, 布莱恩

解决方法

您可以使用正则表达式在需要的地方添加前导 0。

select cast(regexp_replace('6/3/2020 5:19:11 PM','\b([0-9])\b','0\1') AS TIMESTAMP(0) Format 'mm/dd/yyyyBhh:mi:ssbT')

那将返回 2020-06-03 17:19:11。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。