0

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

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

2020 年 6 月 3 日下午 5:19:11

2020 年 11 月 13 日上午 11:37:12

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

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

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

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

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

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

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

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

非常感谢,布赖恩

4

1 回答 1

3

您可以使用正则表达式在需要的地方添加前导 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。

于 2020-12-29T16:57:54.250 回答