Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysql memperbaiki tanggal yang tidak valid

Sepertinya pesan kesalahan Anda berasal dari klien MySQL Anda, bukan dari server. Jadi, menyetel mode ketat server tidak akan membantu Anda menampilkan tanggal ini dengan klien ini.

Sepertinya Anda memiliki beberapa tanggal gaya 2012-09-31 atau 2013-02-29 di data Anda. Mereka diformat dengan benar tetapi sebaliknya salah. Dalam versi MySQL pra 5.0.2 ini tidak tertangkap dengan benar masuk ke data Anda. Sekarang, server Anda, setel ke ALLOW_INVALID_DATES tidak menyumbatnya, tetapi mengubahnya menjadi '0000-00-00'. Dan klien mengejek mereka.

Langkah pertama Anda untuk membersihkannya adalah dengan mengidentifikasi baris yang menyinggung. Anda bisa mencoba ini.

Pertama, aktifkan ALLOW_INVALID_DATES

Kemudian, jalankan kueri ini untuk melihat-lihat di tabel Anda. Jangan gunakan SELECT *

  SELECT col,col,col,DATE_FORMAT(datecol,'%Y-%m-%d') 
    FROM mytable
   ORDER BY DATE_FORMAT(datecol,'%Y-%m-%d') 

Cobalah untuk mencari tahu dari kumpulan hasil tanggal mana yang sampah. Mereka mungkin ditempatkan pertama dalam pernyataan pilih ini, tetapi Anda harus sedikit bersusah payah untuk menemukannya.

Selanjutnya, cari tahu bagaimana Anda ingin memperbaikinya. Hapus baris? Ubah tanggal menjadi 1941-12-07 (tanggal yang hidup dalam keburukan)? Kami tidak dapat memberi tahu Anda apa yang perlu Anda lakukan di sini.

Kemudian, perbaiki. Jika hanya ada satu atau dua, perbaiki satu per satu.

  UPDATE mytable
     SET datecol='whatever replacement date'
   WHERE id='the id of the offending row.'

atau

  DELETE FROM mytable
        WHERE id='the id of the offending row.'

Jika ada ribuan, Anda dapat memperbaikinya secara massal dengan sesuatu seperti ini. Tapi jangan lakukan ini tanpa terlebih dahulu menyelesaikan masalah dengan sangat hati-hati di server pengujian. Jika Anda membuat kesalahan, Anda akan mengotori meja Anda.

  UPDATE mytable
     SET datecol='whatever replacement date'
   WHERE '0000-00-00' = DATE_FORMAT(datecol,'%Y-%m-%d')

Setelah Anda selesai memperbaiki masalah Anda, kembali dan lakukan SELECT * , untuk memastikan Anda mendapatkan semuanya.

Kemudian nonaktifkan ALLOW_INVALID_DATES dan jangan pernah mengaktifkannya kembali.

Itu harus membersihkan kekacauan. Perhatikan bahwa data dunia nyata selalu memiliki beberapa baris yang tidak sempurna di dalamnya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mereset AUTO_INCREMENT di MySQL

  2. Hitung kejadian di beberapa kolom

  3. Kode Kesalahan:1292. Nilai GANDA salah terpotong:'ya'

  4. Bagaimana cara menggunakan MAX di MySQL?

  5. Oracle Database Link - Setara dengan MySQL?