Saya mencoba membuat tabel sebagai berikut,
create table table1(date1 datetime,date2 datetime);
Pertama saya mencoba memasukkan nilai seperti di bawah ini,
insert into table1 values('21-02-2012 6:10:00 PM','01-01-2001 12:00:00 AM');
Itu telah memberikan kesalahan mengatakan,
Tidak dapat mengonversi varchar ke datetime
Kemudian saya mencoba format di bawah ini sebagai salah satu posting yang disarankan oleh stackoverflow kami,
insert into table1 values(convert(datetime,'21-02-2012 6:10:00 PM',5)
,convert(datetime,'01-01-2001 12:00:00 AM',5));
Namun saya masih mendapatkan kesalahan dengan mengatakan,
Konversi gagal saat mengonversi tanggal dan / atau waktu dari string karakter
Ada saran?
sql
sql-server
Mari
sumber
sumber
Jawaban:
Ada banyak format yang didukung oleh SQL Server - lihat MSDN Books Online tentang CAST dan CONVERT . Sebagian besar format itu tergantung pada pengaturan apa yang Anda miliki - karena itu, pengaturan ini mungkin berfungsi beberapa kali - dan kadang-kadang tidak.
Cara untuk mengatasi ini adalah dengan menggunakan format tanggal ISO-8601 (sedikit disesuaikan) yang didukung oleh SQL Server - format ini selalu berfungsi - terlepas dari bahasa SQL Server Anda dan pengaturan format tanggal .
Format ISO-8601 didukung oleh SQL Server hadir dalam dua rasa:
YYYYMMDD
hanya untuk tanggal (tanpa porsi waktu); perhatikan di sini: tidak ada garis putus-putus! , itu sangat penting!YYYY-MM-DD
adalah TIDAK independen dari pengaturan dateformat di SQL Server 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 dapat dihilangkan), dan ditetapkanT
sebagai pembatas antara tanggal dan bagian waktu AndaDATETIME
.Ini berlaku untuk SQL Server 2000 dan yang lebih baru.
Jadi dalam kasus konkret Anda - gunakan string ini:
dan Anda harus baik-baik saja (catatan: Anda perlu menggunakan format internasional 24 jam daripada format AM / PM 12 jam untuk ini).
Atau : jika Anda menggunakan SQL Server 2008 atau yang lebih baru, Anda juga dapat menggunakan
DATETIME2
tipe data (bukan yang biasaDATETIME
) dan saat ini AndaINSERT
hanya akan berfungsi tanpa masalah! :-)DATETIME2
jauh lebih baik dan jauh lebih sedikit pemilih pada konversi - dan itu adalah tipe data tanggal / waktu yang direkomendasikan untuk SQL Server 2008 atau yang lebih baru.Jangan tanya saya mengapa seluruh topik ini begitu rumit dan membingungkan - begitulah adanya. Tetapi dengan
YYYYMMDD
format, Anda harus baik untuk versi SQL Server dan untuk pengaturan bahasa dan format tanggal apa pun di SQL Server Anda.sumber
Konversi dalam SQL server gagal kadang-kadang bukan karena format Tanggal atau Waktu yang digunakan, Ini Hanya karena Anda mencoba untuk menyimpan data yang salah yang tidak dapat diterima oleh sistem.
Contoh:
Create Table MyTable (MyDate);
Insert Into MyTable(MyDate) Values ('2015-02-29');
Server SQL akan melempar kesalahan berikut:
Conversion failed when converting date and/or time from character string.
Alasan untuk kesalahan ini adalah karena tidak ada tanggal (29 Feb) di Tahun (2015).
sumber
Jawaban sederhana - 5 adalah bahasa Italia "yy" dan 105 adalah bahasa Italia "yyyy". Karena itu:
akan bekerja dengan benar, tetapi
akan memberikan kesalahan.
Juga,
akan memberikan kesalahan, dimana sebagai
akan bekerja.
sumber
Cukup perbarui format tanggal seperti di bawah ini
Ini memecahkan masalah bagi saya dan berfungsi dengan baik
sumber
DATEFORMAT
pengaturan sesi Anda . Verifikasi ini dengan menjalankanSET DATEFORMAT MDY;SELECT CAST('2017-08-07 00:00:00' AS datetime); SET DATEFORMAT DMY;SELECT CAST('2017-08-07 00:00:00' AS datetime);
. Ini akan bekerja dengan andal jika Anda menambahkanT
separator (yyyy-MM-ddTHH:mm:ss
).Jika memungkinkan seseorang harus menghindari literal tanggal / waktu spesifik budaya .
Ada beberapa format aman untuk memberikan tanggal / waktu sebagai literal:
Semua contoh untuk
2016-09-15 17:30:00
ODBC (favorit saya, karena ditangani sebagai tipe nyata segera)
{ts'2016-09-15 17:30:00'}
- Stempel Waktu{d'2016-09-15'}
--Tanggal saja{t'17:30:00'}
--Waktu sajaISO8601 (yang terbaik untuk semua tempat )
'2016-09-15T17:30:00'
--SadarilahT
di tengah!Unseperated (risiko kecil untuk disalahartikan sebagai angka)
'20160915'
--hanya untuk kencan murniBaik untuk diingat: Tanggal tidak valid cenderung muncul dengan kesalahan aneh
Satu lagi alasan untuk kesalahan konversi yang aneh: Urutan eksekusi!
SQL-Server tahu benar untuk melakukan hal-hal dalam urutan eksekusi yang mungkin tidak diharapkan. Pernyataan tertulis Anda terlihat seperti konversi dilakukan sebelum beberapa jenis tindakan terkait terjadi, tetapi mesin memutuskan - mengapa pernah - untuk melakukan konversi pada langkah selanjutnya.
Berikut ini adalah artikel yang bagus menjelaskan hal ini dengan contoh: Rusano.com: "t-sql-functions-do-no-imply-a-order-of-eksekusi-eksekusi" dan inilah pertanyaan terkait .
sumber
cara terbaik adalah kode ini
sumber
sumber
Format datetime sebenarnya yang berjalan di sql server adalah
sumber
m
danM
). Baca komentar Dan Guzman untuk jawaban Pronab Roy. Dan baca jawaban lain di sini ...Silakan Coba ini.
SQL Server mengharapkan tanggal dalam format MM / DD / YYYY, Jika Bahasa Inggris ditetapkan sebagai bahasa default Anda. Di sini saya menyimpan nilai datepicker ke database sql2008. Tipe bidang saya adalah datetime dalam database.dpdob adalah nama datepicker saya.
Sekarang gunakan dob dalam permintaan memasukkan Anda.
sumber
Anda dapat mencoba kode ini
sumber
Saya memiliki masalah ini ketika mencoba menyatukan
getdate()
ke dalam string yang saya masukkan ke bidang nvarchar.Saya melakukan casting untuk menyiasatinya:
Itu contoh yang bersih. Bagian utama dari itu adalah:
...' + CAST(CAST(getdate() AS datetime2) AS nvarchar) + '...
Dicoret tanggalnya
datetime2
, lalunvarchar
digabungkan.sumber
Saya sudah mencoba ini dan itu bekerja dengan saya:
sumber
setel Budaya ke bahasa Inggris dari file web.config
misalnya jika Anda mengatur budaya ke bahasa Arab, maka thime akan
22/09/2017 02:16:57 ص
dan Anda mendapatkan kesalahan: Konversi gagal saat mengubah tanggal dan / atau waktu dari string karakter saat memasukkan datetime
sumber
Ini adalah cara mudah mengkonversi dari string ISO ke SQL-Server
datetime
:Sumber https://www.sqlservercurry.com/2010/04/convert-character-string-iso-date-to.html
sumber
Bagi saya ini berhasil:
sumber