如何定义可使用的常量/日期文字ALTER TABLE ADD COLUMN
?
根据文档:
日期和时间常数
常量(也称为文字)是指固定的数据值。Snowflake 支持使用字符串常量来指定固定的日期、时间或时间戳值。字符串常量必须始终包含在分隔符之间。 Snowflake 支持使用单引号来分隔字符串常量。
例如:
date '2010-09-14'
and
表列操作
ADD COLUMN col_name col_data_type [ DEFAULT | AUTOINCREMENT ... ] [ inlineConstraint ] [, ...]
向表中添加新列,包括可选地为该列添加默认和/或内联约束:有关列默认值的其他详细信息,请参阅创建表
...
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 上下文中不起作用。
有没有一种方法可以提供可以使用的常量/简单表达式ALTER TABLE
对于日期列?
这是使用 update 语句的解决方法:
使用时间戳数据类型创建column_name
ALTER TABLE table_name ADD column_name DATE;
由于新创建的列将为空,您可以更新它:
UPDATE table_name SET column_name = cast('2022-01-01' as DATE) WHERE column_name IS NULL;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)