【问题标题】:Default DATE Snowflake: invalid identifier 'DATE'默认日期雪花:无效标识符“日期”
【发布时间】:2021-12-27 09:25:24
【问题描述】:

我正在将数据从 teradata 迁移到 Snowflake 我已将 Teradata 的 DDL 转换为 Snowflake(在 roboquery 中检查过)。

当我在 Snowflake 中运行转换后的 ddl 时,DATE 的默认值出现错误。

CREATE OR REPLACE TABLE XXX.YYYY 
(
    ID NUMBER(8) NOT NULL,
    DERN TIMESTAMP(0) ,
    OBSDATE TIMESTAMP(0)  NOT NULL,
    DATFULL DATE DEFAULT DATE
);

我收到了这个错误:

运行 Liquibase 时出现意外错误:SQL 编译错误:位置 25 处的错误第 5 行无效标识符“DATE”[失败的 SQL:(904)?

为什么我会收到此错误 - Snowflake 使用 DATE?

使用 current_date 是否有任何风险(@Marcel 第一次回答后更新帖子)。

谢谢

【问题讨论】:

  • DATE 只是 Teradata 中 CURRENT_DATE 的旧(旧)同义词

标签: sql snowflake-cloud-data-platform teradata ddl snowflake-schema


【解决方案1】:

基于文档Terradata - DEFAULT:

这个表格...
默认日期 引用字符串

插入…
由 quotestring 指定的日期值作为 DATE 列的默认值。


默认当前日期

当前系统日期

Snowflake 支持日期文字(DATE 'some_date'):

CREATE OR REPLACE TABLE YYYY (
 ID NUMBER(8) NOT NULL,
 DERN TIMESTAMP(0) ,
 OBSDATE TIMESTAMP(0)  NOT NULL,
 DATFULL DATE DEFAULT DATE '1900-01-01'   -- any specific date here
);

Date and Time Constants:

常量(也称为文字)是指固定的数据值。 Snowflake 支持使用字符串常量来指定固定的日期、时间或时间戳值。字符串常量必须始终包含在分隔符之间。

date '2010-09-14'
time '10:03:56'
timestamp '2009-09-15 10:59:43'

总而言之,根据要求:DEFAULT DATE 'YYYY-MM-DD' 或者它必须是当前日期DEFAULT CURRENT_DATE。

【讨论】:

    【解决方案2】:

    我假设您想使用 CURRENT_DATE 作为默认值?

    那么这是代码:

    CREATE OR REPLACE TABLE XXX.YYYY (
     ID NUMBER(8) NOT NULL,
     DERN TIMESTAMP(0) ,
     OBSDATE TIMESTAMP(0)  NOT NULL,
     DATFULL DATE DEFAULT CURRENT_DATE);
    

    【讨论】:

    • 您为什么建议 CURRENT_DATE?当前日期是否始终等于 default_date?
    • 不,“默认日期”是什么意思?你的默认日期是什么时候?
    • 我已经更新了帖子,请检查谢谢。
    • 我的意思是……你的目标是什么?默认值应该是多少?请提供示例记录。
    • CURRENT_DATE() 表示当向表中插入数据时,如果未指定,则 DATFULL 列将填充当前日期值。我想这就是你所追求的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多