Teradata中如何以CCYYMMDD格式存储日期?求可行方案
解决Teradata中无法使用CCYYMMDD日期格式的问题
你遇到的这个问题很常见——Teradata确实不支持CCYYMMDD作为直接的日期格式字符串,这也是为什么你执行第二个查询时会抛出[3530] Invalid FORMAT string错误。不过别担心,有几个简单的替代方案可以满足你想要的四位数年份+月+日的格式需求:
方案1:直接使用YYYYMMDD格式(推荐)
其实YYYYMMDD格式的输出效果和你期望的CCYYMMDD完全一致,因为YYYY本身就代表四位数年份(等同于世纪+两位年份的组合)。你已经测试过这个语句可以正常运行:
SEL CAST(CAST(CURRENT_DATE AS DATE FORMAT 'YYYYMMDD') AS VARCHAR(8));
它会输出类似20191230的结果,完全符合你想要的格式要求,而且语法简洁,是最直接的解决方案。
方案2:拼接世纪与年月日后两位(备选)
如果出于某些特殊场景需要明确拆分世纪和年份部分,你可以分别提取世纪和YYMMDD部分再拼接:
SEL CAST(CAST(CURRENT_DATE AS DATE FORMAT 'CC') || CAST(CURRENT_DATE AS DATE FORMAT 'YYMMDD') AS VARCHAR(8));
不过这个方法本质上和方案1的结果完全相同,只是写法更繁琐,所以一般情况下更推荐方案1。
补充说明
这里要注意:Teradata的DATE类型在内部是用整数形式存储的,并不保存显示格式。我们指定的FORMAT只是控制查询结果的输出格式,而非存储格式。所以如果你的需求是存储日期值,直接使用DATE类型即可;如果是要输出特定格式的字符串,用上面的任意一种方法转换为VARCHAR即可。
内容的提问来源于stack exchange,提问作者Sivakumar Anandhan
相关产品推荐
相关产品推荐

