- 카테고리:
CAST , ::
¶
한 데이터 타입의 값을 다른 데이터 타입으로 변환합니다. CAST의 의미 체계는 해당 TO_ datatype
변환 함수의 의미 체계와 동일합니다. 캐스트가 불가능한 경우, 오류가 발생합니다. 자세한 내용은 개별 TO_ datatype
변환 함수를 참조하십시오. 데이터 타입 변환 및 TO_ datatype
변환 함수에 대한 자세한 내용은 데이터 타입 변환 을 참조하십시오.
::
연산자는 CAST에 대한 대체 구문을 제공합니다.
- 참고 항목:
구문¶
CAST( <source_expr> AS <target_data_type> )
[ RENAME FIELDS | ADD FIELDS ]
<source_expr> :: <target_data_type>
인자¶
source_expr
다른 데이터 타입으로 변환할, 지원되는 모든 데이터 타입의 식입니다.
target_data_type
식을 변환할 데이터 타입입니다. 데이터 타입이 정밀도 및 스케일 (숫자/소수점의 경우)과 같은 추가 속성을 지원하는 경우, 속성이 포함될 수 있습니다.
RENAME FIELDS
정형 OBJECT 의 경우 OBJECT를 변경하여 다른 키-값 페어를 사용하도록 지정합니다. 원래 오브젝트의 값은 나타나는 순서대로 새 키-값 페어에 복사됩니다.
예를 보려면 예: OBJECT에서 키 이름 변경하기 를 참조하십시오.
ADD FIELDS
정형 OBJECT 의 경우 OBJECT에 키-값 페어를 추가하도록 지정합니다.
예를 보려면 예: OBJECT에 키 추가하기 를 참조하십시오.
새로 추가된 키의 값은 NULL로 설정됩니다. 이러한 키에 값을 할당하려면 대신 OBJECT_INSERT 함수를 호출하십시오.
사용법 노트¶
스케일이 입력 값을 유지하기에 충분하지 않은 경우, 함수는 값을 반올림합니다.
정밀도가 입력 값을 유지하기에 충분하지 않은 경우, 함수에서 오류가 발생합니다.
Parquet 파일로 데이터를 언로딩하는 동안 숫자 열이 정수 데이터 타입의 형식으로 명시적으로 캐스팅되면 Parquet 파일에서 이러한 열의 데이터 타입은 INT입니다. 자세한 내용은 명시적으로 숫자 열을 Parquet 데이터 타입으로 변환 섹션을 참조하십시오.
::
대체 구문을 사용하는 경우RENAME FIELDS
또는ADD FIELDS
인자를 지정할 수 없습니다.
예¶
CAST 예제에서는 다음 테이블의 데이터를 사용합니다.
CREATE OR REPLACE TABLE test_data_type_conversion (
varchar_value VARCHAR,
number_value NUMBER(5, 4),
timestamp_value TIMESTAMP);
INSERT INTO test_data_type_conversion VALUES (
'9.8765',
1.2345,
'2024-05-09 14:32:29.135 -0700');
SELECT * FROM test_data_type_conversion;
+---------------+--------------+-------------------------+
| VARCHAR_VALUE | NUMBER_VALUE | TIMESTAMP_VALUE |
|---------------+--------------+-------------------------|
| 9.8765 | 1.2345 | 2024-05-09 14:32:29.135 |
+---------------+--------------+-------------------------+
예제에서는 SYSTEM$TYPEOF 함수를 사용하여 변환된 값의 데이터 타입을 표시합니다.
지정된 크기(2)로 문자열을 숫자로 변환합니다.
SELECT CAST(varchar_value AS NUMBER(5,2)) AS varchar_to_number1,
SYSTEM$TYPEOF(varchar_to_number1) AS data_type
FROM test_data_type_conversion;
+--------------------+------------------+
| VARCHAR_TO_NUMBER1 | DATA_TYPE |
|--------------------+------------------|
| 9.88 | NUMBER(5,2)[SB4] |
+--------------------+------------------+
::
표기법을 사용하여 동일 문자열을 소수 자릿수 5의 숫자로 변환합니다.
SELECT varchar_value::NUMBER(6,5) AS varchar_to_number2,
SYSTEM$TYPEOF(varchar_to_number2) AS data_type
FROM test_data_type_conversion;
+--------------------+------------------+
| VARCHAR_TO_NUMBER2 | DATA_TYPE |
|--------------------+------------------|
| 9.87650 | NUMBER(6,5)[SB4] |
+--------------------+------------------+
숫자를 정수로 변환합니다. 정수의 경우 전체 자릿수와 배율을 지정할 수 없으므로 기본값은 항상 NUMBER(38, 0)입니다.
SELECT CAST(number_value AS INTEGER) AS number_to_integer,
SYSTEM$TYPEOF(number_to_integer) AS data_type
FROM test_data_type_conversion;
+-------------------+-------------------+
| NUMBER_TO_INTEGER | DATA_TYPE |
|-------------------+-------------------|
| 1 | NUMBER(38,0)[SB1] |
+-------------------+-------------------+
숫자를 문자열로 변환합니다.
SELECT CAST(number_value AS VARCHAR) AS number_to_varchar,
SYSTEM$TYPEOF(number_to_varchar) AS data_type
FROM test_data_type_conversion;
+-------------------+------------------------+
| NUMBER_TO_VARCHAR | DATA_TYPE |
|-------------------+------------------------|
| 1.2345 | VARCHAR(16777216)[LOB] |
+-------------------+------------------------+
타임스탬프를 날짜로 변환합니다.
SELECT CAST(timestamp_value AS DATE) AS timestamp_to_date,
SYSTEM$TYPEOF(timestamp_to_date) AS data_type
FROM test_data_type_conversion;
+-------------------+-----------+
| TIMESTAMP_TO_DATE | DATA_TYPE |
|-------------------+-----------|
| 2024-05-09 | DATE[SB4] |
+-------------------+-----------+