

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# CAST 함수
<a name="CAST_function"></a>

CAST 함수는 한 데이터 유형을 다른 호환 가능한 데이터 유형으로 변환합니다. 예를 들어 문자열을 날짜로 변환하거나 숫자 형식을 문자열로 변환할 수 있습니다. CAST는 런타임 변환을 수행합니다. 즉, 변환을 수행해도 원본 테이블의 값 데이터 형식은 변경되지 않습니다. 쿼리의 컨텍스트에서만 변경됩니다.

특정 데이터 유형은 CAST 함수를 사용하여 다른 데이터 유형으로 명시적으로 변환해야 합니다. 다른 데이터 형식은 CAST를 사용하지 않고 다른 명령의 일부로 암시적으로 변환할 수 있습니다. [형식 호환성 및 변환](s_Type_conversion.md)을(를) 참조하세요.

## 구문
<a name="CAST_function-syntax"></a>

한 가지 데이터 형식에서 다른 데이터 형식으로 표현식을 변환할 때는 다음과 같이 두 가지 동등한 구문 형식을 사용할 수 있습니다.

```
CAST ( expression AS type )
```

## 인수
<a name="CAST_function-arguments"></a>

 *expression*   
열 이름이나 리터럴 같이 하나 이상의 값으로 평가되는 표현식입니다. null 값을 변환하면 마찬가지로 null이 반환됩니다. 표현식에는 공백이나 빈 문자열이 포함되면 안 됩니다.

 type**   
BINARY 및 BINARY VARYING 데이터 형식을 [데이터 타입](s_Supported_data_types.md) 제외하고 지원되는 중 하나입니다.

## 반환 타입
<a name="CAST_function-return-type"></a>

CAST는 *type* 인수에서 지정하는 데이터 형식을 반환합니다.

**참고**  
AWS Clean Rooms 다음과 같이 정밀도를 잃는 DECIMAL 변환과 같은 문제가 있는 변환을 수행하려고 하면가 오류를 반환합니다.  

```
select 123.456::decimal(2,1);
```
둘째, 오버플로우를 야기하는 INTEGER 변환입니다.  

```
select 12345678::smallint;
```

## 예제
<a name="CAST_function-examples"></a>

다음에 동등한 2개의 쿼리입니다. 두 쿼리 모두 소수 값을 정수로 변환합니다.

```
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\$1CHAR](TO_CHAR.md)를 사용하여 출력 형식을 추가로 제어할 수 있습니다.

다음은 정수가 문자열로 변환된 예입니다.

```
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)
```