数値型を使用する例
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]
整数列への 10 進値の挿入
次の例では、10 進値を INT 列に挿入します。
insert into film(language_id) values(1.5);
この値は挿入されますが、整数値 2 に切り上げられます。
10 進値のスケールが丸められるため挿入に成功する場合
次の例では、列よりも上位の精度を持つ 10 進値を挿入します。
insert into film(rental_rate) values(35.512);
この例では、値 35.51
が列に挿入されます。
範囲外の 10 進値を挿入する試み
この場合、値 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(1999999.99); insert into film(replacement_cost) values(1999.99); select replacement_cost from film;
+------------------+ | replacement_cost | +------------------+ | 2000000 | | 1999.99 | +------------------+
値 1999999.99
は、REAL
列の精度要件を満たすために 2000000
に変換されます。値 1999.99
はそのままロードされます。