Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

数字类型的示例

CREATE TABLE 语句

以下 CREATE TABLE 语句演示不同数字数据类型的声明:

Copy
create table film ( film_id integer, language_id smallint, original_language_id smallint, rental_duration smallint default 3, rental_rate numeric(4,2) default 4.99, length smallint, replacement_cost real default 25.00);

尝试插入超出范围的整数

以下示例尝试将值 33000 插入到 SMALLINT 列中。

Copy
insert into film(language_id) values(33000);

SMALLINT 的范围为 -32768 至 +32767,因此 Amazon Redshift 将返回错误。

Copy
An error occurred when executing the SQL command: insert into film(language_id) values(33000) ERROR: smallint out of range [SQL State=22003]

将小数值插入到整数列中

以下示例将小数值插入到 INT 列中。

Copy
insert into film(language_id) values(1.5);

插入此值,但会将其四舍五入为整数值 2。

插入因小数位数进行四舍五入而能成功的小数

以下示例将具有更高精度的小数值插入列中。

Copy
insert into film(rental_rate) values(35.512);

在此示例中,值 35.51 将插入列中。

尝试插入超出范围的小数值

在此示例中,值 350.10 超出范围。DECIMAL 列中值的位数等于此列的精度减去其小数位数(对于 RENTAL_RATE 列为 4 减去 2)。换言之,DECIMAL(4,2) 列所允许的范围为 -99.9999.99

Copy
insert into film(rental_rate) values (350.10); ERROR: numeric field overflow DETAIL: The absolute value is greater than or equal to 10^2 for field with precision 4, scale 2.

将精度可变的值插入到 REAL 列中

以下示例将精度可变的值插入到 REAL 列中。

Copy
insert into film(replacement_cost) values(1999.99); insert into film(replacement_cost) values(19999.99); select replacement_cost from film; replacement_cost ------------------ 20000 1999.99 ...

19999.99 将转换为 20000 以满足此列的 6 位精度要求。值 1999.99 将按原样加载。