在Teradata中以“ CCYYMMDD”格式存储日期

时间:2019-12-30 12:22:45

标签: sql teradata-sql-assistant

我想将日期以CCYYMMDD的格式存储在Teradata中,但是我没有这样做。在下面找到我到目前为止尝试过的内容:

查询1:

SEL CAST(CAST(CURRENT_DATE AS DATE FORMAT 'YYYYMMDD') AS VARCHAR(8))
-- Output: 20191230  ==> this works!

查询2:

SEL CAST(CAST(CURRENT_DATE AS DATE FORMAT 'CCYYMMDD') AS VARCHAR(8))
-- output: SELECT Failed.  [3530] Invalid FORMAT string 'CCYYMMDD'.

似乎CCYYMMDD暂时无法在Teradata中使用。有解决方法吗?

使用的工具:Teradata SQL助手

1 个答案:

答案 0 :(得分:0)

内部,日期以整数形式存储在Teradata中。因此,当您说要以其他格式存储它们时,我认为您不能这样做。但是您可以选择如何显示/返回值。

我敢肯定有一种更干净的方法来获取所需的格式,但这是一种方法:

WITH cte (mydate) AS (
  SELECT CAST(CAST(CURRENT_DATE AS DATE FORMAT 'YYYYMMDD') AS CHAR(8)) AS mydate
)
SELECT 
  CAST(
    (CAST(SUBSTRING(mydate FROM 1 FOR 2) AS INTEGER) + 1) -- generate "century" value
    AS CHAR(2) -- cast value as string
  ) || SUBSTRING(mydate FROM 3) AS new_date -- add remaining portion of date string
FROM cte

SQL Fiddle - Postgres

您必须添加一些额外的逻辑来处理1000年之前和9999年之后的年份。我没有要测试的TD系统,但请尝试一下,让我知道。