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

Konversi gagal saat mengonversi tanggal dan/atau waktu dari string karakter saat memasukkan datetime

Ada banyak format yang didukung oleh SQL Server - lihat MSDN Books Online di CAST dan CONVERT. Sebagian besar format tersebut bergantung pada setelan apa yang Anda miliki - oleh karena itu, setelan ini terkadang berfungsi - dan terkadang tidak.

Cara untuk mengatasi ini adalah dengan menggunakan (sedikit disesuaikan) format tanggal ISO-8601 yang didukung oleh SQL Server - format ini berfungsi selalu - terlepas dari bahasa SQL Server dan pengaturan format tanggal.

Format ISO-8601 yang didukung oleh SQL Server hadir dalam dua rasa:

  • YYYYMMDD hanya untuk tanggal (tidak ada porsi waktu); perhatikan di sini:tidak ada tanda hubung! , itu sangat penting! YYYY-MM-DD adalah TIDAK terlepas dari pengaturan format tanggal di SQL Server Anda dan akan TIDAK bekerja dalam segala situasi!

atau:

  • YYYY-MM-DDTHH:MM:SS untuk tanggal dan waktu - perhatikan di sini:format ini memiliki tanda hubung (tetapi mereka bisa dihilangkan), dan T . tetap sebagai pembatas antara bagian tanggal dan waktu DATETIME .

Ini berlaku untuk SQL Server 2000 dan yang lebih baru.

Jadi dalam kasus khusus Anda - gunakan string ini:

insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');

dan Anda akan baik-baik saja (catatan:Anda harus menggunakan 24 jam international internasional format daripada format AM/PM 12 jam untuk ini).

Alternatifnya :jika Anda menggunakan SQL Server 2008 atau yang lebih baru, Anda juga dapat menggunakan DATETIME2 tipe data (bukan DATETIME plain biasa ) dan INSERT your Anda saat ini hanya akan bekerja tanpa masalah! :-) DATETIME2 jauh lebih baik dan tidak terlalu pilih-pilih dalam hal konversi - dan ini adalah tipe data tanggal/waktu yang direkomendasikan untuk SQL Server 2008 atau yang lebih baru.

SELECT
   CAST('02-21-2012 6:10:00 PM' AS DATETIME2),     -- works just fine
   CAST('01-01-2012 12:00:00 AM' AS DATETIME2)   -- works just fine  

Jangan tanya saya mengapa seluruh topik ini begitu rumit dan agak membingungkan - memang begitu adanya. Tapi dengan YYYYMMDD format, Anda akan baik-baik saja untuk semua versi SQL Server dan untuk bahasa dan pengaturan format tanggal apa pun di SQL Server Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa itu Batasan Kunci Utama dalam Database SQL Server - Tutorial SQL Server / T-SQL Bagian 54

  2. Enkripsi Data Transparan (TDE) di SQL Server dalam Grup Ketersediaan AlwaysOn pada Contoh

  3. UNION ALL vs kondisi ATAU dalam permintaan server sql

  4. Server SQL memilih baris yang berbeda hanya menggunakan nilai terbaru

  5. Perbaiki "nama profil tidak valid" Saat Mengirim Email dari SQL Server