Teradata 15中FastLoad加载的VARCHAR日期如何转日期格式?
Teradata中VARCHAR日期转标准格式的解决方案
针对你提到的场景——原表ModifiedDate字段是VARCHAR类型,格式为6/12/2004 0:00,现在要导入新表并转换为标准日期/时间类型,这里有几个实用的方法:
1. 转换为DATE类型(仅保留日期部分)
如果新表只需要日期信息,用TO_DATE函数配合匹配的格式掩码就能搞定:
INSERT INTO 你的新表名 (其他字段列名, ModifiedDate) SELECT 其他字段列名, TO_DATE(ModifiedDate, 'MM/DD/YYYY HH24:MI') AS ModifiedDate FROM 你的原表名;
这里的格式掩码'MM/DD/YYYY HH24:MI'完全对应你的字符串格式:
MM:匹配1-2位的月份(比如6就是6月)DD:匹配1-2位的日期YYYY:4位年份HH24:24小时制的小时(比如0就是凌晨0点)MI:分钟部分
Teradata会自动兼容单数字的月份、小时,不用额外处理。
2. 转换为TIMESTAMP类型(保留时间部分)
如果需要保留0:00这种时间信息,直接转成TIMESTAMP类型即可:
写法一:先转DATE再CAST为TIMESTAMP
INSERT INTO 你的新表名 (其他字段列名, ModifiedDate) SELECT 其他字段列名, CAST(TO_DATE(ModifiedDate, 'MM/DD/YYYY HH24:MI') AS TIMESTAMP) AS ModifiedDate FROM 你的原表名;
写法二:直接CAST指定格式
更简洁的方式是在CAST里直接指定格式:
INSERT INTO 你的新表名 (其他字段列名, ModifiedDate) SELECT 其他字段列名, CAST(ModifiedDate AS TIMESTAMP FORMAT 'MM/DD/YYYY HH24:MI') AS ModifiedDate FROM 你的原表名;
额外注意事项
- 格式一定要对应:如果你的CSV里日期格式有变种(比如是日/月/年,或者用点号分隔),要调整格式掩码,否则会转换失败。
- 提前校验脏数据:转换前可以先检查有没有不符合格式的记录,避免导入报错:
SELECT ModifiedDate FROM 你的原表名 WHERE TRYCAST(ModifiedDate AS DATE FORMAT 'MM/DD/YYYY HH24:MI') IS NULL;TRYCAST会对不符合格式的记录返回NULL,不会直接抛出错误,方便你清理脏数据。 - 后续FastLoad优化:以后再用FastLoad加载CSV时,其实可以直接在脚本里把字段定义为
DATE或TIMESTAMP并指定格式,省去后续转换步骤。比如:ModifiedDate (TIMESTAMP, FORMAT 'MM/DD/YYYY HH24:MI')
这样就能顺利完成数据转换和导入啦。
内容的提问来源于stack exchange,提问作者Ramiz Tariq
相关产品推荐
相关产品推荐

