【问题标题】:Convert varchar(50) to Date Format 'yyyy-mm-dd' in teradata?将 varchar(50) 转换为 teradata 中的日期格式“yyyy-mm-dd”?
【发布时间】:2014-12-31 20:18:45
【问题描述】:

我在创建时将一列定义为Date 格式yyyy-mm-dd

我想从其他表中插入数据,该表的列为varchar(50)

在选择并插入表格时出现此错误

插入失败。 2665:日期无效。

有人可以帮我铸造这个吗?

INSERT INTO TEMP_TABLES.FACT
(

CUSTOMER_ACCOUNT_ID, 
LOB_START_DATE, 

)

SEL  
CUSTOMER_ACCOUNT_ID,
I.start_date   as LOB_START_DATE,

FROM  #LOGIN I

left join JOURNEY_TABLE.DOTCOM_DIM d1
on I.PAGES = d1.PAGE_DESC

这是存储在 varchar(50) 字段中的日期示例:2014-04-03

提前致谢

【问题讨论】:

  • 你能发布实际的插入语句吗?
  • 您能否发布一个存储在 VARCHAR(50) 字段中的日期示例?
  • 2014-04-03 这样存储...
  • 我要做的第一件事就是从该列中取出前 10 个字符,因为您知道日期不能超过 10 个字节。但如果你有任何对约会无效的东西,它就会失败。

标签: teradata


【解决方案1】:

如果有帮助,这里有一个查询,可以让您识别日期无效的行:

select
*
from
#login t1
left outer join sys_calendar.calendar t2
on t1.start_date =  cast (cast(t2.calendar_date as date format 'YYYY-MM-DD') as char(10))
where t2.calendar_date is null

从此查询返回的任何行都将包含无效日期。

【讨论】:

    【解决方案2】:

    我认为您只需要format 声明

    examples here

    SEL  
    CUSTOMER_ACCOUNT_ID,
    cast(((I.start_date (date, format 'yyyy-mm-dd'))(char(10))) as LOB_START_DATE,
    

    【讨论】:

      【解决方案3】:

      在更新的 Teradata 版本中,有一个 TRYCAST() 函数。如果转换失败,此函数将尝试转换数据并返回NULL,而不是使语句失败。

      INSERT INTO TEMP_TABLES.FACT
      (
      CUSTOMER_ACCOUNT_ID, 
      LOB_START_DATE, 
      )
      SELECT Customer_Account_ID
           , TRYCAST(I.Start_Date AS DATE) AS LOB_START_DATE
      FROM  #LOGIN I
      LEFT JOIN JOURNEY_TABLE.DOTCOM_DIM d1
        ON I.Pages = d1.Page_Desc;
      

      【讨论】:

        猜你喜欢
        • 2012-03-05
        • 2018-03-16
        • 2013-10-19
        • 2020-02-03
        • 2017-06-24
        • 2018-02-24
        • 1970-01-01
        • 1970-01-01
        • 2020-01-29
        相关资源
        最近更新 更多