数据类型强制运算符 (CAST)
数据类型强制转换(转换)将表达式的值传递给输入转换例程以转换为指定的数据类型,得到指定类型的常数。在 Vertica 中,可以通过使用以下结构之一的显式转换请求来调用数据类型强制功能:
语法
SELECT CAST ( expression AS data‑type )
SELECT expression::data‑type
SELECT data‑type 'string'
参数
截断
如果将二进位值转换(隐式或显式)为较小长度的二进位类型,该值将被自动截断。例如:
=> SELECT 'abcd'::BINARY(2);
?column?
----------
ab
(1 row)
类似地,如果将字符值转换(隐式或显式)为较小长度的字符值,该值将被自动截断。例如:
=> SELECT 'abcd'::CHAR(3);
?column?
----------
abc
(1 row)
二进制转换和调整大小
Vertica 仅支持以下转换和调整大小操作:
-
从 BINARY 转换到和转换自 VARBINARY
-
从 VARBINARY 转换到和转换自 LONG VARBINARY
-
从 BINARY 转换到和转换自 LONG VARBINARY
对于包含少于目标列字节的值的二进位数据,零字节 '\0'
的值向右扩展为整个列宽。可变长度的二进位值的尾随零不能向右扩展:
=> SELECT 'ab'::BINARY(4), 'ab'::VARBINARY(4), 'ab'::LONG VARBINARY(4);
?column? | ?column? | ?column?
------------+----------+----------
ab\000\000 | ab | ab
(1 row)
自动强制
如果常数类型明确,可以忽略显式类型转换。例如,直接分配常数到一列中,该常数会自动强制转换为该列的数据类型。
示例
=> SELECT CAST((2 + 2) AS VARCHAR);
?column?
----------
4
(1 row)
=> SELECT (2 + 2)::VARCHAR;
?column?
----------
4
(1 row)
=> SELECT INTEGER '123';
?column?
----------
123
(1 row)
=> SELECT (2 + 2)::LONG VARCHAR
?column?
----------
4
(1 row)
=> SELECT '2.2' + 2;
ERROR: invalid input syntax for integer: "2.2"
=> SELECT FLOAT '2.2' + 2;
?column?
----------
4.2
(1 row)