- 类别:
VALUES¶
在 SELECT 语句中,FROM 子句的 VALUES 分子句允许指定一组常量来形成有限的行集。
有关 INSERT 语句中 VALUES 子句的信息,请参阅 INSERT 语句的文档。
语法¶
参数¶
expr每个表达式必须是常量,或者是在 SQL 语句编译期间可以计算为常量的表达式。
大多数简单的算术表达式和字符串函数都可以在编译时计算,但大多数其他表达式不能。
table_alias可选别名,用于为行集命名,就好像行集是一个表一样。
column_alias可选的列别名,可指定列名称。
使用说明¶
在 FROM 子句中,VALUES 子句不能包含
DEFAULT关键字。这与 INSERT 语句中的 VALUES 子句相反,后者支持使用DEFAULT;例如INSERT INTO table VALUES (10, DEFAULT, 'Name') ...。如果 VALUES 子句包含同一列的多个不同数据类型的值,则 Snowflake 会确定一个可以包含所有值的通用数据类型,并将每个值隐式转换为该通用类型。如果您没有意识到,这种转换可能会产生意外的结果或错误。
为避免意外强制转换,请显式将每个值 CAST 为所需的类型,将值分成多个 SQL 语句,或确保列中的所有值共享相同的类型。
数字示例
当同一列中的数值在小数位数或精度方面存在显着差异时,Snowflake 可能会返回
out of range错误,因为值不适合确定的通用数值类型。特别是对于数值,您还可以将值指定为放在引号中的文本字符串,然后根据需要将其转换为数值。
时间戳示例
当不同类型的时间戳值出现在同一列中时,Snowflake 会将所有值转换为通用时间戳类型。在以下示例中,TIMESTAMP_NTZ 值被强制转换为 TIMESTAMP_LTZ:
VALUES 子句限制为 200,000 行。
示例¶
以下示例使用 VALUES 子句生成一组固定的已知行:
您可以通过列名称(隐式)或列位置来引用值。以下示例按列位置引用第二列:
以下示例使用别名区分多个 VALUES 子句:
您还可以为列名指定别名,如以下示例所示: