Saat mengonversi antar tipe data di SQL Server, Anda akan mengalami berbagai fungsi yang tampaknya melakukan hal yang sama. Namun, biasanya ada perbedaan antara fungsi-fungsi ini yang mungkin tidak terlihat pada pandangan pertama. Contohnya adalah perbedaan antara CAST()
dan TRY_CAST()
fungsi.
Artikel ini menunjukkan perbedaan antara fungsi-fungsi ini saat menggunakan SQL Server.
Perbedaan utama antara CAST()
dan TRY_CAST()
fungsi adalah cara mereka menangani data yang tidak dapat dikonversi.
Fungsi CAST()
CAST()
fungsi mengubah ekspresi dari satu tipe data ke tipe data lainnya. Ini memungkinkan Anda untuk melakukan hal-hal seperti, menggabungkan dua nilai dari tipe data yang berbeda. Seperti ini:
SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;
Hasil:
Result ----------- Comments: 9
Ini berfungsi dengan baik ketika data dapat dikonversi. Tetapi bagaimana jika data tidak dapat dikonversi?
Dalam hal ini Anda akan mendapatkan sesuatu seperti ini:
SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;
Hasil:
Error: Arithmetic overflow error converting numeric to data type varchar.
Ini cukup adil – jika SQL Server tidak dapat mengonversi data, Anda perlu tahu!
Namun, ada cara lain untuk melakukannya.
Fungsi TRY_CAST()
TRY_CAST()
fungsi bekerja seperti CAST()
kecuali jika data tidak dapat dikonversi, ia mengembalikan null
(Alih-alih membuat kesalahan seperti CAST()
tidak):
SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;
Hasil:
Result ------ null
Ini berguna jika Anda ingin menggunakan pemrograman bersyarat sehingga aplikasi melakukan tugas yang berbeda tergantung pada apakah data dapat dikonversi atau tidak.
Contoh:
SELECT CASE WHEN TRY_CAST(10.00 AS varchar(2)) IS NULL THEN 'Cast failed' ELSE 'Cast succeeded' END AS Result;
Hasil:
Result ----------- Cast failed
Jenis Data Tidak Valid
TRY_CAST()
fungsi hanya bekerja dengan cara ini saat menggunakan tipe data yang valid. Jadi, Anda akan mendapatkan kesalahan jika Anda secara eksplisit memberikan tipe data yang tidak diizinkan.
Contoh:
SELECT 'Comments: ' + TRY_CAST(10.00 AS Miami) AS Result;
Hasil:
Error: Type Miami is not a defined system type.