Cara Memperbaiki & lsquo; Penukaran Gagal ketika Menukar Tarikh dan / atau Masa dari Rentetan Karakter & rsquo; Ralat?

Terdapat banyak keadaan ketika tarikh dan waktu tidak muncul dalam format yang Anda inginkan, dan juga output permintaan sesuai dengan keperluan penonton. Terdapat beberapa ciri built-in SQL Server untuk memformat rentetan tarikh sesuai dengan keperluan anda, tetapi agar string dapat ditafsirkan oleh SQL Server dan untuk mengelakkan kesalahan penukaran, ia harus dalam format yang tepat. Apabila kita cuba menukar tarikh atau masa dari rentetan watak berikut kekeliruan timbul kadang-kadang. "Penukaran gagal ketika menukar tarikh dan / atau waktu dari rentetan watak."

ralat penukaran masa tarikh

Kesalahan yang disebutkan di atas biasanya timbul apabila literal tarikh tidak tepat dan tidak dapat ditukarkan dari rentetan menjadi DateTime atau tarikh. Kesalahan ini disebabkan oleh beberapa sebab, yang akan kami bincangkan secara terperinci bersama dengan penyelesaian yang telah ditetapkan.

Contoh 1:

United Kingdom Tarikh dan notasi waktu memaparkan tarikh menggunakan format hari-bulan-tahun (10 Januari 2015 atau 10/1/2015) yang dapat kita capai dengan menggunakan fungsi SQL Server built_in fungsi "ubah" dengan gaya pemformatan 103.

Di sini dalam contoh di bawah ini kita dapat melihat bahawa rentetan tarikh yang disediakan dalam format yang salah. Pertama, ia memberikan bulan, kemudian hari dan pada tahun lalu yang mana salah dan tidak dapat ditafsirkan oleh SQL Server yang mengakibatkan kesalahan. Format yang betul untuk penukaran tarikh gaya UK menggunakan gaya tarikh "103" adalah "dd / mm / yyyy".

Format yang salah:

Nyatakan @date_time_value varchar (100) = '10 / 16/2015 21:02:04 'pilih CONVERT (datetime2, @date_time_value, 103) sebagai UK_Date_Time_Style

Format yang betul:

Format tarikh Inggeris dan Perancis adalah 103 = "dd / mm / yyyy" atau 3 = "dd / mm / yy". Di sini 103 dan 3 adalah gaya tarikh.

Nyatakan @date_time_value varchar (100) = '10 / 1/15 21:02:04 'pilih CONVERT (datetime2, @date_time_value, 103) sebagai Date_Time_Style
Nyatakan @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:

Kadang-kadang penukaran rentetan hingga tarikh dalam pelayan SQL mengakibatkan kesilapan, bukan kerana format tarikh atau waktu yang digunakan, tetapi kerana anda cuba menyimpan maklumat yang salah yang tidak dapat diterima oleh skema.

Tarikh Salah:

Sebab kesilapan berikut adalah kerana pada tahun 2019 tidak ada tarikh seperti "29 Februari" kerana ini bukan tahun lompat.

Nyatakan @date_time_value varchar (100) = '2019-02-29 21:02:04' pilih pelakon (@date_time_value sebagai datetime2) sebagai date_time_value

Yang Betul:

Nyatakan @date_time_value varchar (100) = '2019-02-28 21:02:04' pilih pelakon (@date_time_value sebagai datetime2) sebagai date_time_value

Format Tarikh ISO 8601:

Walaupun terdapat banyak format yang tersedia untuk memanipulasi nilai tarikh, ketika bekerja untuk massa global / antarabangsa, boleh menjadi masalah kebolehgunaan untuk memilih perwakilan waktu. Jadi literal tarikh / masa khusus budaya harus dielakkan. Sekiranya kita menganggap tarikh ini "03/08/2018", maka akan ditafsirkan dengan cara yang berbeza di berbagai wilayah di dunia.

  • Dalam gaya UK ia ditafsirkan sebagai "8 Mac 2018"
  • Dalam gaya Eropah ia ditafsirkan sebagai "3 Ogos 2018"

Nasib baik, ada satu alternatif dalam format tarikh antarabangsa yang dikembangkan oleh ISO. Format ISO 8601 standard global "YYYY-MM-DDThh: mm: ss" adalah pilihan yang lebih bebas bahasa untuk literal string dan ia menangani semua masalah ini. Manakala, "yyyy" adalah tahun, "mm" adalah bulan dan "dd" adalah hari. Jadi tarikh "8 Mac 2018" dalam format ISO antarabangsa ditulis sebagai "2018-03-08". Oleh itu format ISO adalah pilihan terbaik untuk perwakilan tarikh.

Nyatakan @date_time_value varchar (100) = '2019-03-28 21:02:04' pilih tukar (datetime2, @ date_time_value, 126) sebagai [yyyy-mm-ddThh: mi: ss.mmm]

Cadangan:

Semoga artikel ini dapat membantu meredakan kekeliruan yang sering saya lihat di masyarakat mengenai nilai tarikh / masa. Walau bagaimanapun, disarankan agar tidak menyimpan tarikh dalam jenis teks (varchar, char, nvarchar, nchar, atau text) Sentiasa simpan nilai tarikh dalam lajur jenis DATE, DATETIME dan lebih disukai DATETIME2 (memberikan lebih tepat) dan meninggalkan format maklumat tarikh ke lapisan antara muka pengguna dan bukannya diambil dari pangkalan data.