繁体   English   中英

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

[英]Problem with converting character string to date in Teradata

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 语句或正则表达式。 我认为必须有一个简单的解决方案,因为这似乎很常见。

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

非常感谢,布赖恩

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM