Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Perbaiki Msg 241 "Konversi gagal saat mengonversi tanggal dan/atau waktu dari string karakter" di SQL Server

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() atau TRY_CONVERT() . Fungsi-fungsi ini mengembalikan NULL bukannya kesalahan.

Contoh:

SELECT TRY_CAST('Tomorrow' AS date); 

Hasil:

NULL

Ini 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 menentukan date ketik alih-alih jenis lainnya.

Contoh:

SELECT CAST('Wednesday' AS char(3)); 

Hasil:

Rabu

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan Bahasa yang Saat Ini Digunakan di SQL Server

  2. Perbaiki:"Pernyataan BACKUP LOG tidak diizinkan saat model pemulihan SEDERHANA" di SQL Server (dan SQL Edge)

  3. SQL Server SMO mengeluhkan DLL yang hilang

  4. Waktu kueri habis dari aplikasi web tetapi berjalan dengan baik dari studio manajemen

  5. DATEPART() Contoh di SQL Server