默认日期雪花:无效标识符“日期”

Posted

技术标签:

【中文标题】默认日期雪花:无效标识符“日期”【英文标题】: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 的旧(旧)同义词 【参考方案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 列将填充当前日期值。我想这就是你所追求的。

以上是关于默认日期雪花:无效标识符“日期”的主要内容,如果未能解决你的问题,请参考以下文章

雪花 - 无效的标识符

ORA-00904: "FORMAT": 无效标识符

雪花在 TIMESTAMP_NTZ 列中显示“无效日期”

双列的选择条件(ORA-00904:标识符无效)

sql中带有无效标识符错误的子查询

在 Oracle SQL 中比较日期