

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# TRY\$1CAST 함수
<a name="r_TRY_CAST"></a>

CAST 함수와 비교하여 TRY\$1CAST는 먼저 표현식을 지정된 유형으로 캐스팅하려고 시도합니다. 변환 오류로 인해 캐스팅이 실패하면 작업은 Null을 반환합니다. 변환이 명시적으로 허용되지 않는 경우 작업은 오류를 반환합니다. 아래 사용 노트에서 가능한 변환 목록을 확인할 수 있습니다. 예를 들어 부울을 타임스탬프로 변환하려고 시도하는 것은 허용되지 않습니다.

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

```
TRY_CAST(expression AS type)
```

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

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

 *\$1type*   
 지원되는 데이터 유형 중 하나입니다. 데이터 유형에 대한 전체 목록은 [데이터 타입](c_Supported_data_types.md) 섹션을 참조하세요. 지원되는 소스 데이터 유형 및 대상 데이터 유형 쌍의 목록은 아래 사용 노트를 참조하세요.

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

TRY\$1CAST는 *type* 인수에서 지정하는 데이터 유형을 반환합니다. 변환에 실패하면 작업이 Null을 반환합니다.

## 사용 노트
<a name="r_TRY_CAST-usage-notes"></a>

다음은 Amazon Redshift가 TRY\$1CAST에 대해 지원하는 소스 데이터 유형 및 대상 데이터 유형 쌍의 목록입니다.

 * BOOL *   
 SMALLINT, INT, BIGINT, SUPER 

 * SMALLINT *   
 BOOL, INT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER 

 * INT *   
 BOOL, SMALLINT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER 

 * BIGINT *   
 BOOL, SMALLINT, INT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER 

 * DECIMAL *   
 SMALLINT, INT, BIGINT, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER 

 * REAL *   
 SMALLINT, INT, BIGINT, DECIMAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER 

 * FLOAT *   
 SMALLINT, INT, BIGINT, DECIMAL, REAL, BPCHAR, TEXT, VARCHAR, SUPER 

 * BPCHAR *   
 SMALLINT, INT, BIGINT, DECIMAL, REAL, FLOAT, TEXT, VARCHAR, TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMETZ, SUPER 

 * TEXT *   
 SMALLINT, INT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, VARCHAR, TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMETZ, SUPER 

 * VARCHAR *   
 SMALLINT, INT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMETZ, SUPER 

 * TIMESTAMP *   
 BPCHAR, TEXT, VARCHAR, TIMESTAMPTZ, DATE, TIME 

 * TIMESTAMPTZ *   
 BPCHAR, TEXT, VARCHAR, TIMESTAMP, DATE, TIME, TIMETZ 

 * DATE *   
 BPCHAR, TEXT, VARCHAR, TIMESTAMP, TIMESTAMPTZ 

 * TIME *   
 BPCHAR, TEXT, VARCHAR 

 * TIMETZ *   
 BPCHAR, TEXT, VARCHAR 

 * SUPER *   
 SUPER는 DATE, TIME, TIMETZ, TIMESTAMP 및 TIMESTAMPTZ를 제외한 다른 데이터 유형으로 변환할 수 있습니다.

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

다음 예제에서는 STRING을 INTEGER로 캐스팅합니다.

```
SELECT TRY_CAST('123' AS INT);

int
----
123
```

다음 예는 Null을 반환합니다. STRING을 INTEGER로 변환하는 것은 허용되므로 TRY\$1CAST는 오류를 반환하지 않지만 'foo'는 정수가 아니므로 함수는 Null을 반환합니다.

```
SELECT TRY_CAST('foo' AS INT)
```

다음 예제에서는 BOOLEAN을 TIMESTAMP로 변환할 수 없으므로 오류를 반환합니다.

```
SELECT TRY_CAST(true as timestamp);
```

TRY\$1CAST는 변환에 실패할 경우 즉시 오류를 반환하는 대신 Null을 반환하므로 TRY\$1CAST를 사용하여 잘못된 데이터를 필터링할 수 있습니다. Akua Mansa의 연령 열에서 변환 실패로 인해 잘못된 행이 필터링되는 다음 예제를 생각해 보세요.

```
CREATE TABLE IF NOT EXISTS student_data(
name VARCHAR(100) NOT NULL,
age VARCHAR(3) NOT NULL,
enrollment_date DATE NOT NULL);

INSERT INTO student_data (name, age, enrollment_date)
VALUES
('Alejandro Rosalez', '10', '01/01/2000'),
('Akua Mansa', 'Ten', '01/01/2000');

SELECT * FROM student_data WHERE TRY_CAST(age AS INT) IS NOT NULL;

--Akua is not returned.
 name              | age | enrollment_date
-------------------+-----+-----------------
 Alejandro Rosalez | 10  | 01/01/2000
```