默认日期雪花:无效标识符“日期”
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 列将填充当前日期值。我想这就是你所追求的。以上是关于默认日期雪花:无效标识符“日期”的主要内容,如果未能解决你的问题,请参考以下文章