如何将MM/DD/YYYY HH:MI格式时间转换为Teradata Timestamp
Teradata MM/DD/YYYY HH:MI格式字符串转Timestamp报错解决
报错原因
原SQL的格式匹配规则和输入字符串不兼容:
- 小写格式符
mm、hh强制要求匹配两位带前导零的月份、小时值(比如4月必须写为04,0点必须写为00),但传入的字符串中单数字的月、小时没有补前导零,无法通过格式校验。 - 其余格式逻辑(日期分隔符、日期时间间隔、分钟匹配)的写法没有问题。
正确实现方案
方案1:调整CAST格式符适配无前置补零的数值
将强制固定两位的小写格式符替换为支持1-2位可变长度的大写格式符即可,SQL如下:
SELECT CAST('4/13/2022 0:00' AS TIMESTAMP(0) FORMAT 'MM/DD/YYYYBHH:MI')
用到的格式符规则:
MM:匹配1-12的月份,同时支持1位(如4)、2位(如04、12)写法DD:匹配1-31的日期,同时支持1位、2位写法B:匹配日期和时间之间的单个空格HH:匹配0-23的24小时制小时,同时支持1位、2位写法MI:匹配00-59的分钟,固定两位长度,和输入规则匹配
方案2:使用TO_TIMESTAMP函数转换
可以直接用时间转换函数,写法可读性更强:
SELECT TO_TIMESTAMP('4/13/2022 0:00', 'MM/DD/YYYY HH24:MI')
其中HH24代表按24小时制解析小时值,同样兼容不带前导零的数字写法。
注意:如果字段中同时存在带前导零、不带前导零的月/日/小时值,上述两种方案都可以自动兼容,不需要额外做字符串替换处理。如果你的时间是12小时制带AM/PM标识,需要在格式末尾追加
AM格式符做匹配。
内容的提问来源于stack exchange,提问作者Yasir Ahmed Pirkani
相关产品推荐
相关产品推荐

