添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

当您通过显式转换调用数据类型转换(转换),但该转换失败时,结果将返回错误或 NULL。当您尝试进行冲突的转换时,如尝试将包含字母的 VARCHAR 表达式转换为整数,通常就会发生转换失败。

当转换失败时,返回的结果取决于数据类型。

启用严格的时间转换

您可以使所有转换失败产生错误,包括针对日期/时间数据类型的转换。这样做将使您能查看某些或所有转换失败的原因。要返回错误而不是 NULL,请将配置参数 EnableStrictTimeCasts 设置为 1:

ALTER SESSION SET EnableStrictTimeCasts=1;

默认情况下,EnableStrictTimeCasts 设置为 0。因此,以下尝试将 VARCHAR 转换为 TIME 数据类型的行为返回 NULL:

==> SELECT current_value from configuration_parameters WHERE parameter_name ilike '%EnableStrictTimeCasts%'; current_value --------------- (1 row) => CREATE TABLE mytable (a VARCHAR); CREATE TABLE => INSERT INTO mytable VALUES('one'); OUTPUT -------- (1 row) => INSERT INTO mytable VALUES('1'); OUTPUT -------- (1 row) => COMMIT; COMMIT => SELECT a::time FROM mytable; (2 rows)

如果启用 EnableStrictTimeCasts,则转换失败返回错误:

=> ALTER SESSION SET EnableStrictTimeCasts=1; ALTER SESSION => SELECT a::time FROM mytable; ERROR 3679: Invalid input syntax for time: "1"

使所有转换失败返回 NULL

要将某一表达式显式转换为请求的数据类型,请使用以下结构:

SELECT expression::data-type

使用此命令将任何值转换为冲突的数据类型,将返回以下错误:

=> SELECT 'one'::time;
ERROR 3679:  Invalid input syntax for time: "one"

Vertica 也支持使用强制转换运算符 ::! ,当希望返回以下结果时很有用:

对于非日期/时间数据类型,返回 NULL 而不是错误

在设置 EnableStrictTimeCasts 后,返回 NULL 而不是错误

使所有转换失败返回 NULL 可使在转换期间成功的表达式显示在结果中。但在转换期间失败的表达式将产生 NULL 值。

以下示例使用强制转换运算符 ::! 查询 mytable 。查询返回 NULL,其中列 a 包含字符串 one ;返回 1 ,其中列包含 1 。无论如何设置 EnableStrictTimeCasts,查询结果都相同:

=> SELECT current_value FROM configuration_parameters WHERE parameter_name ilike '%EnableStrictTimeCasts%';
 current_value
---------------
(1 row)
=> SELECT a::!int FROM mytable;
(2 rows)
ALTER SESSION SET EnableStrictTimeCasts=1;
ALTER SESSION
=> SELECT a::!int FROM mytable;
(2 rows)

您可以使用 ::! 转换数组和集合。转换单独解析每个元素,为无法转换的元素生成 NULL。