雪花 - ALTER TABLE ADD COLUMN

时间:2021-03-24 19:59:16

标签: sql snowflake-cloud-data-platform

如何定义适用于 ALTER TABLE ADD COLUMN 的常量/日期文字?

根据文档:

<块引用>

Date and Time Constants

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

例如:

date '2010-09-14'

<块引用>

Table Column Actions

  ADD COLUMN col_name col_data_type [ DEFAULT | AUTOINCREMENT ... ] [ inlineConstraint ] [, ...]

向表中添加新列,包括可选地为列添加默认和/或内联约束:有关列默认值的其他详细信息,请参阅CREATE TABLE

...

DEFAULT <expr>

列默认值由指定的表达式定义,可以是以下任何一种:

  • 恒定值。

  • 简单的表达

  • 序列参考(seq_name.NEXTVAL)

对于现有表 t:

CREATE TABLE t(d DATE);
INSERT INTO t(d) VALUES ('2000-01-01');

SELECT * FROM t;
-- D
-- 2000-01-01

-- addding new columns with default value works fine for these data types
ALTER TABLE t ADD COLUMN d2 INT DEFAULT 1;
ALTER TABLE t ADD COLUMN d3 STRING DEFAULT 'some string';

让我们尝试添加带有默认值的新日期列:

ALTER TABLE t ADD COLUMN d1 DATE DEFAULT '2000-01-01';
-- SQL compilation error: Default value data type does not match data type for column D1

ALTER TABLE t ADD COLUMN d1 DATE DEFAULT '2000-01-01'::DATE;
-- SQL compilation error: Invalid column default expression [CAST('2000-01-01' AS DATE)]

ALTER TABLE t ADD COLUMN d1 DATE DEFAULT date '2000-01-01';
-- SQL compilation error: Invalid column default expression [CAST('2000-01-01' AS DATE)]

-- default value during creation is possible
CREATE OR REPLACE TABLE t(d DATE DEFAULT date '2000-01-01');

似乎应该是日期文字的date '2000-01-01'被视为表达式[CAST('2000-01-01' AS DATE)],这不是一个简单的表达式。 它适用于 CREATE TABLE 的上下文,但不适用于 ALTER TABLE 的上下文。

有没有办法为 DATE 列提供适用于 ALTER TABLE 的常量/简单表达式?

0 个答案:

没有答案