[转载]CAST 関数および CONVERT 関数

原文⇒CAST 関数および CONVERT 関数

 

互換性のあるデータ型間の変換を実行時に行うには、CAST 関数および CONVERT 関数を使用します。

特定のデータ型は、CAST 関数または CONVERT 関数を使用して、他のデータ型に明示的に変換する必要があります。その他のデータ型は、CAST 関数または CONVERT 関数を使用せずに、別のコマンドの一部として暗黙的に変換できます。「型の互換性と変換」を参照してください。

CAST

式のデータ型を変換するには、同等の 2 つの構文フォームを使用します。

 
CAST ( expression AS type )
expression :: type

引数

expression

1 つ以上の値 (列名、値など) に評価される式。null 値を変換すると、null が返されます。式に、空白または空の文字列を含めることはできません。

type

サポートされる データ型 の 1 つ。

戻り型

CAST は、type 引数で指定されたデータ型を返します。

注記

問題のある変換を実行しようとすると、Amazon Redshift はエラーを返します。たとえば、以下の DECIMAL 変換では、精度が低下します。

 
select 123.456::decimal(2,1);

また、次の INTEGER 変換では、オーバーフローが生じます。

 
select 12345678::smallint;

CONVERT

CONVERT 関数を使用して、値のデータ型を変換することもできます。

 
CONVERT ( type, expression )

 

引数

type

サポートされる データ型 の 1 つ。

expression

1 つ以上の値 (列名、値など) に評価される式。null 値を変換すると、null が返されます。式に、空白または空の文字列を含めることはできません。

戻り型

CONVERT は、type 引数で指定されたデータ型を返します。

次の 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)

  

次のクエリは、CONVERT 関数を使用して同じ結果を返します。

 
select convert(integer, pricepaid)
from sales where salesid=100;

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)

 

次の例では、日付列の値がタイムスタンプとしてキャストされます。

 
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)

 

次の例では、整数が文字列に変換されます。

 
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)

 



posted @ 2019-03-07 14:26  Park_SAP  阅读(1827)  评论(0)    收藏  举报