显式和隐式铸造
隐式转换是使用内部规则来尝试评估和处理包含混合数据类型的语句。 当使用一个期望使用特定数据类型的函数时,或者当发布一个比较相似但数据类型不同的值的查询时,这可能会很有帮助。 Netezza Performance ServerSQL 语言符合隐式数据类型转换的 SQL 标准。
例如,在下面的语句中,两个表达式可以是列名、字面量或更复杂的表达式:
SELECT * FROM tbl WHERE <character expression> > <integer expression>;由于字符表达式正在与整数表达式进行比较,因此字符表达式被隐式地转换为整数表达式。隐式转换有时会失败,因为数据无法以符合新数据类型的方式进行解析。 (例如,字符串 "abc "既不能被解析为整数,也不能被解析为日期) 在这种情况下,请使用 "
cast函数将数据明确转换为适当的数据类型。 例如,如果列age包含表示整数值的字符数据,则应像这样将该数据转换为整数数据:SELECT * FROM tbl WHERE cast(age as integer) > 3;隐式转换失败时发出的错误信息示例:
- 当表达式无法解析为整数时:
ERROR:pg_atoi:"abc "中的错误:无法解析 "abc"
- 当字符表达式不能被解析为日期值时:
错误:错误的日期外部表示法 "abc
出现这种错误的原因可能是SELECT * FROM tbl WHERE <date expression> = <character expression>;INSERT INTO <table having one column of type date> SELECT <character expression> FROM <another table>;
- 当字符表达式无法解析为数值时:
错误: 65524:精度范围错误
例如,当表达式试图将数值(24,4)乘以 varchar(50)时,系统会尝试将 varchar 隐式转换为数值(24,4)。 但是,如果 varchar 包含的位数过多,就会导致精度范围错误。