Jika Anda mendapatkan pesan kesalahan SQL Server Msg 241 yang berbunyi Konversi gagal saat mengonversi tanggal dan/atau waktu dari string karakter , ini mungkin karena Anda mencoba mengonversi string ke nilai tanggal/waktu, tetapi string tersebut tidak dapat dikonversi ke nilai tanggal/waktu.
Contoh Kesalahan
Berikut contoh kode yang menghasilkan kesalahan:
SELECT CAST('Tomorrow' AS date);
Hasil:
Pesan 241, Level 16, Status 1, Baris 1Konversi gagal saat mengonversi tanggal dan/atau waktu dari string karakter.
Di sini, kami mencoba mengonversi string Tomorrow
ke date
ketik, tapi Tomorrow
bukan tanggal yang valid yang dapat diubah menjadi date
ketik.
SQL Server tidak dapat mengonversi string menjadi date
dan itu mengembalikan kesalahan.
Solusi 1
Cara paling jelas untuk memperbaikinya adalah dengan mengubah string agar menyerupai tanggal sebenarnya.
Jika Anda melewati kolom, periksa apakah Anda memiliki kolom yang benar. Sama jika Anda meneruskan variabel – periksa apakah itu variabel yang benar.
Misalnya, konversi berikut berhasil:
SELECT CAST('20 Feb 2030' AS date);
Hasil:
2020-02-20
Bergantung pada format tanggal input, Anda mungkin lebih baik menggunakan CONVERT()
fungsi, sehingga Anda dapat menentukan format ekspresi tanggal input.
Contoh:
SELECT
CONVERT(date, '03/02/2030', 101) AS 'US with century',
CONVERT(date, '03/02/30', 1) AS 'US without century',
CONVERT(date, '03/02/2030', 103) AS 'British with century',
CONVERT(date, '03/02/30', 3) AS 'US without century';
Hasil:
+-------------------+-----------------------+--- ----------+----------------------+| AS dengan abad | AS tanpa abad | Inggris dengan abad | AS tanpa abad ||-------------------+------------+-- ----------------------+-----------------------|| 2030-03-02 | 2030-03-02 | 2030-02-03 | 2030-02-03 |+-------------------+------------+ ------------------------+------------+Solusi 2
Cara lain untuk mengatasi kesalahan adalah dengan menggunakan
TRY_CAST()
atauTRY_CONVERT()
. Fungsi-fungsi ini mengembalikanNULL
bukannya kesalahan.Contoh:
SELECT TRY_CAST('Tomorrow' AS date);
Hasil:
NULLIni tidak serta merta mengatasi masalah mendasar, itu hanya menyembunyikannya. Konversi tetap tidak dapat dilakukan.
Bagaimanapun, ini mungkin masih menjadi pilihan yang layak, tergantung pada kebutuhan Anda.
Solusi 3
Cara lain untuk mengatasi kesalahan adalah dengan mengonversi string ke tipe data yang berbeda. Jelas, ini tidak baik jika Anda ingin mengakhiri dengan
date
ketik, tetapi mungkin kesalahan terjadi karena Anda tidak sengaja menentukandate
ketik alih-alih jenis lainnya.Contoh:
SELECT CAST('Wednesday' AS char(3));
Hasil:
Rabu