数字类型的示例
CREATE TABLE 语句
以下 CREATE TABLE 语句演示不同数字数据类型的声明:
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 列中。
insert into film(language_id) values(33000);
SMALLINT 的范围为 -32768 至 +32767,因此 Amazon Redshift 将返回错误。
An error occurred when executing the SQL command: insert into film(language_id) values(33000) ERROR: smallint out of range [SQL State=22003]
将小数值插入到整数列中
以下示例将小数值插入到 INT 列中。
insert into film(language_id) values(1.5);
插入此值,但会将其四舍五入为整数值 2。
插入由于小数位数四舍五入而成功的小数
以下示例将具有更高精度的小数值插入列中。
insert into film(rental_rate) values(35.512);
在此示例中,值 35.51 将插入列中。
尝试插入超出范围的小数值
在此示例中,值 350.10 超出范围。DECIMAL 列中值的位数等于此列的精度减去其小数位数(对于 RENTAL_RATE 列为 4 减去 2)。换言之,DECIMAL(4,2) 列所允许的范围为 -99.99 到 99.99。
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 列中。
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 将按原样加载。