

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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>

 *表達式*   
任何評估為一或多個值的表達式，例如欄名或常值。轉換 Null 值會傳回 Null。表達式不能包含空格或空字串。

 *type*   
 其中一種支援的資料類型。如需資料類型的完整清單，請參閱 [資料類型](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
```