View a markdown version of this page

Fungsi TRY_CAST - Amazon Redshift

Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting blog yang diterbitkan pada 30 Juni 2025.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Fungsi TRY_CAST

Dibandingkan dengan fungsi CAST, TRY_CAST pertama-tama mencoba untuk mentransmisikan ekspresi ke tipe yang ditentukan. Jika casting gagal karena kesalahan konversi, operasi mengembalikan null. Jika konversi tidak diizinkan secara eksplisit, operasi mengembalikan kesalahan. Anda dapat menemukan daftar kemungkinan konversi di catatan penggunaan di bawah ini. Misalnya, mencoba mengonversi boolean ke stempel waktu tidak diizinkan.

Sintaksis

TRY_CAST(expression AS type)

Argumen

ekspresi

Ekspresi yang mengevaluasi satu atau lebih nilai, seperti nama kolom atau literal. Mengkonversi nilai null mengembalikan nol. Ekspresi tidak dapat berisi string kosong atau kosong.

jenis

Salah satu tipe data yang didukung. Untuk daftar lengkap tipe data, lihatJenis Data. Untuk daftar jenis data sumber yang didukung dan pasangan tipe data target, lihat catatan penggunaan di bawah ini.

Jenis pengembalian

TRY_CAST mengembalikan nilai tipe data yang ditentukan oleh argumen tipe. Jika konversi gagal, operasi mengembalikan null.

Catatan penggunaan

Berikut ini adalah daftar tipe data sumber dan pasangan tipe data target yang didukung Amazon Redshift untuk TRY_CAST.

BOOL

SMALLINT, INT, BIGINT, SUPER

SMALLINT

BOOL, INT, BIGINT, DESIMAL, REAL, FLOAT, BPCHAR, TEKS, VARCHAR, SUPER

INT

BOOL, SMALLINT, BIGINT, DESIMAL, REAL, FLOAT, BPCHAR, TEKS, VARCHAR, SUPER

BIGINT

BOOL, SMALLINT, INT, DESIMAL, REAL, FLOAT, BPCHAR, TEKS, VARCHAR, SUPER

DESIMAL

SMALLINT, INT, BIGINT, REAL, FLOAT, BPCHAR, TEKS, VARCHAR, SUPER

NYATA

SMALLINT, INT, BIGINT, DESIMAL, FLOAT, BPCHAR, TEKS, VARCHAR, SUPER

MENGAPUNG

SMALLINT, INT, BIGINT, DESIMAL, REAL, BPCHAR, TEKS, VARCHAR, SUPER

BPCHAR

SMALLINT, INT, BIGINT, DESIMAL, REAL, FLOAT, TEKS, VARCHAR, STEMPEL WAKTU, TIMESTAMPTZ, TANGGAL, WAKTU, TIMEZ, SUPER

TEKS

SMALLINT, INT, BIGINT, DESIMAL, REAL, FLOAT, BPCHAR, VARCHAR, STEMPEL WAKTU, TIMESTAMPTZ, TANGGAL, WAKTU, TIMEZ, SUPER

VARCHAR

SMALLINT, INT, BIGINT, DESIMAL, REAL, FLOAT, BPCHAR, TEKS, STEMPEL WAKTU, TIMESTAMPTZ, TANGGAL, WAKTU, TIMEZ, SUPER

STEMPEL WAKTU

BPCHAR, TEKS, VARCHAR, TIMESTAMPTZ, TANGGAL, WAKTU

STEMPEL WAKTU

BPCHAR, TEKS, VARCHAR, STEMPEL WAKTU, TANGGAL, WAKTU, TIMEZ

TANGGAL

BPCHAR, TEKS, VARCHAR, STEMPEL WAKTU, STEMPEL WAKTU

WAKTU

BPCHAR, TEKS, VARCHAR

TIMETZ

BPCHAR, TEKS, VARCHAR

SUPER

SUPER dapat dikonversi ke jenis data lainnya, dengan pengecualian DATE, TIME, TIMETZ, TIMESTAMP, dan TIMESTAMPTZ.

Contoh

Contoh berikut melemparkan STRING menjadi INTEGER.

SELECT TRY_CAST('123' AS INT); int ---- 123

Contoh berikut mengembalikan null. Mengkonversi STRING ke INTEGER diizinkan sehingga TRY_CAST tidak mengembalikan kesalahan, tetapi 'foo' bukan bilangan bulat sehingga fungsinya mengembalikan null.

SELECT TRY_CAST('foo' AS INT)

Contoh berikut mengembalikan kesalahan, karena mengonversi BOOLEAN ke TIMESTAMP tidak diizinkan.

SELECT TRY_CAST(true as timestamp);

Karena TRY_CAST mengembalikan null alih-alih segera mengembalikan kesalahan jika konversi gagal, Anda dapat menggunakan TRY_CAST untuk menyaring data yang tidak valid. Pertimbangkan contoh berikut, di mana baris yang tidak valid disaring karena kegagalan konversi di kolom usia untuk 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