기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
CAST 함수
CAST 함수는 한 데이터 유형을 다른 호환 가능한 데이터 유형으로 변환합니다. 예를 들어 문자열을 날짜로 변환하거나 숫자 형식을 문자열로 변환할 수 있습니다. CAST는 런타임 변환을 수행합니다. 즉, 변환을 수행해도 원본 테이블의 값 데이터 형식은 변경되지 않습니다. 쿼리의 컨텍스트에서만 변경됩니다.
CAST 함수는 한 데이터 유형을 다른 데이터 유형으로 변환한다는 점에서 CONVERT 함수와 매우 유사하지만 호출되는 방식이 다릅니다.
CAST 또는 CONVERT 함수를 사용하여 다른 데이터 형식으로 명시적인 변환이 필요한 데이터 형식이 몇 가지 있습니다. 그 밖에 CAST 또는 CONVERT를 사용하지 않고 다른 명령의 일부로서 묵시적으로 변환할 수 있는 데이터 형식들도 있습니다. 형식 호환성 및 변환 섹션을 참조하십시오.
구문
한 가지 데이터 형식에서 다른 데이터 형식으로 표현식을 변환할 때는 다음과 같이 두 가지 동등한 구문 형식을 사용할 수 있습니다.
CAST ( expression AS type ) expression :: type
인수
- expression
-
열 이름이나 리터럴 같이 하나 이상의 값으로 평가되는 표현식입니다. null 값을 변환하면 마찬가지로 null이 반환됩니다. 표현식에는 빈 문자열이나 빈 문자열이 포함될 수 없습니다.
- type
-
VARBYTE데이터 타입, BINARY 및 BINARY 가변 데이터 유형을 제외하고 지원되는 데이터 유형 중 하나입니다.
반환 타입
CAST는 type 인수에서 지정하는 데이터 형식을 반환합니다.
참고
AWS Clean Rooms 다음과 같이 정밀도가 떨어지는 십진수 변환과 같이 문제가 있는 변환을 수행하려고 하면 오류가 반환됩니다.
select 123.456::decimal(2,1);
둘째, 오버플로우를 야기하는 INTEGER 변환입니다.
select 12345678::smallint;
예제
다음에 동등한 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_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)