Lebih
Konversi gagal ketika mengubah tanggal dan/atau waktu dari karakter string sambil memasukkan datetime
Saya mencoba untuk membuat sebuah tabel sebagai berikut,
create table table1(date1 datetime,date2 datetime);
Pertama saya mencoba memasukkan nilai-nilai seperti di bawah ini,
insert into table1 values('21-02-2012 6:10:00 PM','01-01-2001 12:00:00 AM');
Telah memberikan kesalahan yang mengatakan,
Tidak dapat mengkonversi ke datetime varchar
Kemudian saya coba format di bawah ini sebagai salah satu posting yang disarankan oleh kami stackoverflow,
insert into table1 values(convert(datetime,'21-02-2012 6:10:00 PM',5)
,convert(datetime,'01-01-2001 12:00:00 AM',5));
Tapi saya masih mendapatkan error mengatakan,
Konversi gagal ketika mengubah tanggal dan/atau waktu dari karakter string
Ada saran?
143
12
Ada banyak format yang didukung oleh SQL Server - lihat MSDN Buku Online di COR dan MENGKONVERSI. Sebagian besar dari format tersebut adalah tergantung pada pengaturan apa yang anda miliki - oleh karena itu, pengaturan ini mungkin bekerja beberapa kali - dan kadang-kadang tidak.
Cara untuk memecahkan masalah ini adalah dengan menggunakan (sedikit disesuaikan) ISO-8601 format tanggal yang didukung oleh SQL Server - format ini bekerja selalu - terlepas dari SQL Server bahasa dan pengaturan dateformat.
The ISO-8601 format didukung oleh SQL Server datang dalam dua rasa:
YYYYMMDD
hanya untuk tanggal (tidak ada waktu porsi); catatan berikut: tidak ada tanda hubung!, yang's sangat penting!YYYY-MM-DD
adalah TIDAK independen dari pengaturan dateformat di SQL Server anda dan akan TIDAK **** bekerja pada semua situasi!atau:
YYYY-MM-DDTHH:MM:SS
untuk tanggal dan waktu - catatan berikut ini: format ini telah tanda hubung (tapi mereka ** bisa dihilangkan), dan tetapT
sebagai pembatas antara tanggal dan waktu sebagian dari andaDATETIME
.Ini berlaku untuk SQL Server 2000 dan yang lebih baru.
Jadi dalam kasus beton - menggunakan string ini:
dan anda harus baik-baik saja (catatan: anda perlu menggunakan internasional 24 format lebih dari 12 jam AM/PM format ini).
Atau: jika anda're pada SQL Server 2008 atau yang lebih baru, anda juga bisa menggunakan
datetime2 datetimeand
datatype (bukan polosDATETIME
) dan anda saat iniINSERT
hanya akan bekerja tanpa masalah! :-)Datetime2 datetimeand
adalah jauh lebih baik dan jauh lebih pilih-pilih pada konversi - dan's merekomendasikan date/time tipe data untuk SQL Server 2008 atau yang lebih baru pula.Don't meminta saya mengapa ini seluruh topik ini begitu rumit dan agak membingungkan - yang's hanya cara itu. Tapi dengan
YYYYMMDD
format, anda harus baik untuk setiap versi dari SQL Server dan untuk setiap bahasa dan dateformat pengaturan di SQL Server.Konversi SQL server kadang-kadang gagal bukan karena Tanggal atau Waktu format yang digunakan, Hal ini Hanya karena anda mencoba untuk menyimpan data yang salah yang tidak dapat diterima oleh sistem.
Contoh:
Membuat Tabel MyTable (MyDate);
Masukkan Ke MyTable(MyDate) Nilai-Nilai ('2015-02-29');
SQL server akan melemparkan kesalahan berikut:
Conversion failed when converting tanggal dan/atau waktu dari karakter string.
Alasan untuk ini kesalahan hanya ada tanggal tersebut (Feb-29) di Tahun ini (2015).
Jawaban sederhana - 5 italia "yy" dan 105 italia "yyyy". Oleh karena itu:
akan bekerja dengan benar, tapi
akan memberikan kesalahan.
Demikian juga,
akan memberikan kesalahan, di mana sebagai
akan bekerja.
Bila memungkinkan satu harus menghindari budaya tanggal tertentu/waktu literal.
Ada beberapa aman format untuk memberikan tanggal/waktu sebagai literal:
Semua contoh-contoh untuk
2016-09-15 17:30:00
ODBC (favorit saya, karena ditangani sebagai nyata tipe langsung)
{ts'2016-09-15 17:30:00'}
--Cap Waktu{d'2016-09-15'}
--Saat ini hanya{t'17:30:00'}
--Waktu hanyaISO8601 (terbaik untuk dimana-mana)
'2016-09-15T17:30:00'
--diketahui dariT
di tengah!Unseperated (kecil risiko untuk mendapatkan disalahartikan sebagai nomor)
'20160915'
--hanya untuk murni tanggalBaik untuk menjaga dalam pikiran: tidak Valid tanggal cenderung muncul dengan kesalahan aneh
Satu lagi alasan yang aneh konversi kesalahan: Urutan eksekusi!
SQL Server juga tahu untuk melakukan hal-hal dalam rangka pelaksanaan salah satu yang mungkin tidak diharapkan. Pernyataan tertulis anda terlihat seperti konversi selesai sebelum beberapa jenis terkait dengan tindakan mengambil tempat, tapi mesin memutuskan - mengapa - untuk melakukan konversi pada langkah berikutnya.
Berikut ini adalah artikel yang menjelaskan hal ini dengan contoh-contoh: Rusano.com: "t-sql-functions-do-no-imply-a-certain-order-of-execution" dan di sini adalah terkait pertanyaan.
Hanya memperbarui tanggal format seperti di bawah ini
Memecahkan masalah untuk saya dan itu bekerja dengan baik
cara terbaik adalah kode ini
Silakan Coba ini.
SQL Server mengharapkan tanggal dalam MM/DD/YYYY,Jika bahasa inggris ditetapkan sebagai bahasa default anda.Di sini saya menabung datepicker nilai untuk sql2008 database.Saya tipe field datetime di database.dpdob saya datepicker nama.
Sekarang menggunakan dob di menyisipkan query.
Datetime format sebenarnya yang berjalan pada sql server
Anda dapat mencoba kode ini
Aku punya masalah ini ketika mencoba untuk menggabungkan
getdate()
menjadi sebuah string yang aku memasukkan ke dalam nvarchar lapangan.Aku melakukan casting untuk mendapatkan sekitar ini:
Yang's dibersihkan contoh. Bagian utama dari itu adalah:
...' + COR(CAST(getdate() SEBAGAI datetime2 datetimeand) SEBAGAI nvarchar) + '...
Dicor tanggal sebagai
datetime2 datetimeand
, maka sebagainvarchar
untuk menggabungkan itu.set Budaya untuk bahasa inggris dari web.config
misalnya jika anda menetapkan budaya arab saat akan
22/09/2017 02:16:57 ini.
dan anda mendapatkan error:Konversi gagal ketika mengubah tanggal dan/atau waktu dari karakter string sambil memasukkan datetime