Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog
Funzione TRY_CAST
Rispetto alla funzione CAST, TRY_CAST tenta innanzitutto di eseguire il cast dell’espressione per il tipo specificato. Se il cast non riesce a causa di errori di conversione, l’operazione restituisce null. Se una conversione non è esplicitamente consentita, l’operazione restituisce un errore. Puoi trovare l’elenco delle possibili conversioni nelle note per l’utilizzo riportate di seguito. Ad esempio, il tentativo di convertire un booleano in un timestamp non è consentito.
Sintassi
TRY_CAST(expression AS type)
Argomenti
- Espressione
-
Un'espressione che valuta uno o più valori, ad esempio un nome di colonna o un letterale. La conversione di valori null restituisce null. L'espressione non può contenere stringhe o spazi vuoti.
- tipo
-
Uno dei tipi di dati supportati. Per l’elenco completo dei tipi di dati, consulta Tipi di dati. Per l’elenco delle coppie di tipi di dati di origine e tipi di dati di destinazione supportate, consulta le note per l’utilizzo riportate di seguito.
Tipo restituito
TRY_CAST restituisce un valore per il tipo di dati specificato dall’argomento type. Se la conversione non riesce, l’operazione restituisce null.
Note per l’utilizzo
Di seguito è riportato l’elenco delle coppie di tipi di dati di origine e tipi di dati di destinazione supportate da Amazon Redshift per TRY_CAST.
- 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 può essere convertito in qualsiasi altro tipo di dati, a eccezione di DATE, TIME, TIMETZ, TIMESTAMP e TIMESTAMPTZ.
Esempi
L’esempio seguente esegue il cast di una STRINGA in un NUMERO INTERO.
SELECT TRY_CAST('123' AS INT);int ---- 123
Il seguente esempio restituisce null. La conversione di una STRINGA in un NUMERO INTERO è consentita, quindi TRY_CAST non restituisce un errore. Tuttavia 'foo' non è un numero intero, quindi la funzione restituisce null.
SELECT TRY_CAST('foo' AS INT)
L’esempio seguente restituisce un errore perché la conversione di un BOOLEANO in un TIMESTAMP non è consentita.
SELECT TRY_CAST(true as timestamp);
Poiché TRY_CAST restituisce null anziché restituire immediatamente un errore in caso di mancata conversione, puoi utilizzare TRY_CAST per filtrare i dati non validi. Considera l’esempio seguente, in cui una riga non valida viene filtrata a causa di un errore di conversione nella colonna dell’età per 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