翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
CAST 関数
CAST 関数は、1 つのデータ型を互換性のある別のデータ型に変換します。例えば、文字列を日付に変換したり、数値型を文字列に変換したりできます。CAST はランタイム変換を実行します。つまり、変換によってソーステーブル内の値のデータ型は変更されません。クエリのコンテキストでのみ変更されます。
CAST 関数は、あるデータ型から別のデータ型に変換するという点では CONVERT 関数 とよく似ていますが、呼び出し方が異なります。
特定のデータ型は、CAST 関数または CONVERT 関数を使用して、他のデータ型に明示的に変換する必要があります。その他のデータ型は、CAST や CONVERT を使用せずに、別のコマンドの一部として暗黙的に変換できます。型の互換性と変換 を参照してください。
構文
式のデータ型を別のデータ型に変換するには、次の 2 つの同等な構文フォームのいずれかを使用します。
CAST ( expression AS type ) expression :: type
引数
- expression
-
1 つ以上の値 (列名、値など) に評価される式。null 値を変換すると、null が返されます。式には空白または空の文字列を含めることはできません。
- type
-
VARBYTE データ型、BINARY、BINARY VARYING データ型を除き、サポートされているデータ型の 1 つ。
戻り型
CAST は、type 引数で指定されたデータ型を返します。
注記
AWS Clean Rooms 次のように、精度が低下する DECIMAL 変換など、問題のある変換を実行しようとするとエラーが返されます。
select 123.456::decimal(2,1);
また、次の INTEGER 変換では、オーバーフローが生じます。
select 12345678::smallint;
例
次の 2 つのクエリは同等です。どちらも 10 進値を整数に変換します。
select cast(pricepaid as integer) from sales where salesid=100;
pricepaid ----------- 162 (1 row)
select pricepaid::integer from sales where salesid=100;
pricepaid ----------- 162 (1 row)
次の場合も同様の結果が得られます。サンプルデータの実行は必要ありません。
select cast(162.00 as integer) as pricepaid;
pricepaid ----------- 162 (1 row)
次の例では、タイムスタンプ列の値を日付に変換して、各結果から時刻を削除します。
select cast(saletime as date), salesid from sales order by salesid limit 10;
saletime | salesid -----------+--------- 2008-02-18 | 1 2008-06-06 | 2 2008-06-06 | 3 2008-06-09 | 4 2008-08-31 | 5 2008-07-16 | 6 2008-06-26 | 7 2008-07-10 | 8 2008-07-22 | 9 2008-08-06 | 10 (10 rows)
前のサンプルで示した CAST を使用しなかった場合、結果には 2008-02-18 02:36:48 という時刻が含まれます。
次のクエリは、可変文字データを日付に変換します。実行にサンプルデータは必要ありません。
select cast('2008-02-18 02:36:48' as date) as mysaletime;
mysaletime -------------------- 2008-02-18 (1 row)
次の例では、日付列の値をタイムスタンプに変換します。
select cast(caldate as timestamp), dateid from date order by dateid limit 10;
caldate | dateid --------------------+-------- 2008-01-01 00:00:00 | 1827 2008-01-02 00:00:00 | 1828 2008-01-03 00:00:00 | 1829 2008-01-04 00:00:00 | 1830 2008-01-05 00:00:00 | 1831 2008-01-06 00:00:00 | 1832 2008-01-07 00:00:00 | 1833 2008-01-08 00:00:00 | 1834 2008-01-09 00:00:00 | 1835 2008-01-10 00:00:00 | 1836 (10 rows)
前のサンプルのようなケースでは、を使用して出力フォーマットをさらに制御できます。TO_CHAR
次の例では、整数が文字列に変換されます。
select cast(2008 as char(4));
bpchar -------- 2008
次の例では、DECIMAL(6,3) 値を DECIMAL(4,1) 値に変換します。
select cast(109.652 as decimal(4,1));
numeric --------- 109.7
この例は、より複雑な式を示しています。SALES テーブル内の PRICEPAID 列 (DECIMAL(8,2) 列) を DECIMAL(38,2) 列に変換し、結果の値を 100000000000000000000 で乗算します。
select salesid, pricepaid::decimal(38,2)*100000000000000000000 as value from sales where salesid<10 order by salesid;
salesid | value ---------+---------------------------- 1 | 72800000000000000000000.00 2 | 7600000000000000000000.00 3 | 35000000000000000000000.00 4 | 17500000000000000000000.00 5 | 15400000000000000000000.00 6 | 39400000000000000000000.00 7 | 78800000000000000000000.00 8 | 19700000000000000000000.00 9 | 59100000000000000000000.00 (9 rows)