Bagaimana cara Memperbaiki Kesalahan 'Konversi Gagal saat Mengonversi Tanggal dan / atau Waktu dari String Karakter'?
Ada banyak contoh ketika tanggal dan waktu tidak muncul dalam format yang Anda inginkan, juga tidak ada keluaran kueri yang sesuai dengan kebutuhan pemirsa. Ada beberapa fitur bawaan SQL Server untuk memformat string tanggal sesuai dengan kebutuhan Anda, tetapi agar string dapat diinterpretasikan oleh SQL Server dan untuk menghindari kesalahan konversi, string harus dalam format yang benar. Ketika kami mencoba untuk mengubah tanggal atau waktu dari string karakter berikut kesalahan kadang-kadang muncul. "Konversi gagal saat mengubah tanggal dan / atau waktu dari string karakter."
Kesalahan yang disebutkan di atas biasanya muncul ketika literal tanggal tidak tepat dan tidak dapat diubah dari string menjadi DateTime atau tanggal. Kesalahan ini terjadi karena sejumlah alasan, yang akan kita bahas secara rinci bersama dengan kumpulan solusi.
Contoh 1:
Inggris Raya Notasi tanggal dan waktu menampilkan tanggal menggunakan format hari-bulan-tahun (10 Januari 2015 atau 10/1/2015) yang dapat kita capai dengan menggunakan fitur SQL Server built_in fungsi “convert” dengan gaya format 103.
Di sini, pada contoh di bawah ini, kita dapat melihat bahwa string tanggal yang diberikan dalam format yang salah. Pertama, memberikan bulan, kemudian hari dan tahun lalu yang salah dan tidak dapat diinterpretasikan oleh SQL Server yang menghasilkan kesalahan. Format yang benar untuk konversi tanggal gaya Inggris Raya menggunakan gaya tanggal "103" adalah "hh / bb / tttt".
Format yang salah:
Deklarasikan waktu-waktu tertentu varchar (100) = '/ 16/2015 21:02:04' pilih CONVERT (datetime2, @datetimevalue, 103) sebagai UKateime
Format yang Benar:
Format tanggal Inggris dan Prancis adalah 103 = "hh / mm / tttt" atau 3 = "hh / mm / ttt". Di sini 103 dan 3 adalah model tanggal.
Deklarasikan @date_time_value varchar (100) = '10 / 1/15 21:02:04 'pilih CONVERT (datetime2, @date_time_value, 103) sebagai Date_Time_Style
Deklarasikan @date_time_value varchar (100) = '10 / 1/15 21:02:04 'pilih CONVERT (datetime2, @date_time_value, 3) sebagai UK_Date_Time_Style
Contoh 2:
Terkadang konversi string ke tanggal di server SQL menghasilkan kesalahan, bukan karena format tanggal atau waktu yang digunakan, melainkan karena Anda mencoba menyimpan informasi yang salah yang tidak dapat diterima oleh skema.
Tanggal yang salah:
Alasan kesalahan berikut hanyalah bahwa pada tahun 2019 tidak ada tanggal seperti "29 Februari" karena itu bukan tahun kabisat.
Deklarasikan nilai waktu varchar (100) = '2019-02-29 21:02:04' pilih cast (@datetimevalue sebagai datetime2) sebagai datetime2
Yang benar:
Deklarasikan nilai waktu varchar (100) = '2019-02-28 21:02:04' pilih cast (@datetimevalue sebagai datetime2) sebagai datetime2
Format Tanggal ISO 8601:
Meskipun banyak format tersedia untuk memanipulasi nilai tanggal, ketika bekerja untuk massa global / internasional, dapat menjadi masalah kegunaan untuk memilih representasi waktu. Jadi literal tanggal / waktu khusus budaya harus dihindari. Jika kita menganggap tanggal ini “03/08/2018”, itu akan ditafsirkan dengan mengikuti cara yang berbeda di berbagai wilayah di dunia.
- Dalam gaya Inggris, ini diartikan sebagai "8 Maret 2018"
- Dalam gaya Eropa ini diartikan sebagai "3 Agustus 2018"
Untungnya, ada satu alternatif dalam format tanggal internasional yang dikembangkan oleh ISO. Format ISO 8601 standar global “YYYY-MM-DDThh: mm: ss” adalah opsi yang lebih tidak bergantung pada bahasa untuk literal string dan mengatasi semua masalah ini. Sedangkan “yyyy” adalah tahun, “mm” adalah bulan dan “hh” adalah hari. Sehingga tanggal “8 Maret 2018” dalam format ISO internasional tertulis “2018-03-08”. Jadi format ISO adalah pilihan terbaik untuk representasi tanggal.
Nyatakan @date_time_value varchar (100) = '2019-03-28 21:02:04' pilih convert (datetime2, @ date_time_value, 126) sebagai [yyyy-mm-ddThh: mi: ss.mmm]
Rekomendasi:
Semoga artikel ini membantu menghilangkan kebingungan yang sering saya lihat di komunitas tentang nilai tanggal / waktu. Namun, disarankan agar tidak pernah menyimpan tanggal dalam tipe teks (varchar, char, nvarchar, nchar, atau teks) Selalu simpan nilai tanggal di DATE, DATETIME dan sebaiknya DATETIME2 (memberikan lebih presisi) kolom tipe dan, biarkan format informasi tanggal ke lapisan antarmuka pengguna alih-alih diambil dari database.