Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Dibandingkan dengan fungsi CAST, TRY_CAST pertama kali 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 dalam 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 pasangan tipe data sumber dan tipe data target yang didukung, 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
-
KECIL, INT, BIGINT, SUPER
- KECIL
-
BOOL, INT, BIGINT, DESIMAL, NYATA, MENGAMBANG, BPCHAR, TEKS, VARCHAR, SUPER
- INT
-
BOOL, SMALLINT, BIGINT, DESIMAL, NYATA, FLOAT, BPCHAR, TEKS, VARCHAR, SUPER
- BIGINT
-
BOOL, SMALLINT, INT, DESIMAL, NYATA, FLOAT, BPCHAR, TEKS, VARCHAR, SUPER
- DESIMAL
-
SMALLINT, INT, BIGINT, NYATA, MENGAMBANG, BPCHAR, TEKS, VARCHAR, SUPER
- NYATA
-
SMALLINT, INT, BIGINT, DESIMAL, FLOAT, BPCHAR, TEKS, VARCHAR, SUPER
- MENGAPUNG
-
SMALLINT, INT, BIGINT, DESIMAL, NYATA, BPCHAR, TEKS, VARCHAR, SUPER
- BPCHAR
-
SMALLINT, INT, BIGINT, DESIMAL, NYATA, MENGAMBANG, TEKS, VARCHAR, STEMPEL WAKTU, TIMESTAMPTZ, TANGGAL, WAKTU, TIMETZ, SUPER
- TEKS
-
SMALLINT, INT, BIGINT, DESIMAL, NYATA, MENGAMBANG, BPCHAR, VARCHAR, STEMPEL WAKTU, TIMESTAMPTZ, TANGGAL, WAKTU, TIMETZ, SUPER
- VARCHAR
-
SMALLINT, INT, BIGINT, DESIMAL, NYATA, FLOAT, BPCHAR, TEKS, STEMPEL WAKTU, TIMESTAMPTZ, TANGGAL, WAKTU, TIMETZ, SUPER
- STEMPEL WAKTU
-
BPCHAR, TEKS, VARCHAR, TIMESTAMPTZ, TANGGAL, WAKTU
- TIMESTAMPTZ
-
BPCHAR, TEKS, VARCHAR, STEMPEL WAKTU, TANGGAL, WAKTU, TIMETZ
- TANGGAL
-
BPCHAR, TEKS, VARCHAR, STEMPEL WAKTU, TIMESTAMPTZ
- WAKTU
-
BPCHAR, TEKS, VARCHAR
- JADWAL
-
BPCHAR, TEKS, VARCHAR
- SUPER
-
SUPER dapat dikonversi menjadi tipe data lain, dengan pengecualian DATE, TIME, TIMETZ, TIMESTAMP, dan TIMESTAMPTZ.
Contoh
Contoh berikut melemparkan STRING ke INTEGER.
SELECT TRY_CAST('123' AS INT);
int ---- 123
Contoh berikut mengembalikan null. Mengonversi STRING ke INTEGER diizinkan sehingga TRY_CAST tidak mengembalikan kesalahan, tetapi 'foo' bukan bilangan bulat sehingga fungsi 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 memfilter data yang tidak valid. Perhatikan 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