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

Hapus semua tanggal nol dari database MySQL di semua Tabel

Untuk mengubah nilai yang ada, Anda dapat menggunakan kueri seperti ini:

UPDATE tablename SET date_column = '1900-01-01' WHERE date_column = '0000-00-00';

Jika Anda ingin mengotomatiskan kueri UPDATE, Anda dapat menggunakan pernyataan yang telah disiapkan:

SET @sql_update=CONCAT_WS(' ', 'UPDATE', CONCAT(_schema, '.', _table),
                               'SET', _column, '=', '\'1900-01-01\'',
                               'WHERE', _column, '=', '\'0000-00-00\'');

PREPARE stmt FROM @sql_update;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Dan Anda dapat mengulang semua kolom di semua tabel pada skema saat ini yang dideklarasikan sebagai tanggal:

SELECT
  table_schema,
  table_name,
  column_name
FROM
  information_schema.columns
WHERE
  table_schema=DATABASE() AND data_type LIKE 'date%'

Untuk mengulang semua kolom, Anda dapat menggunakan prosedur tersimpan:

DELIMITER //
CREATE PROCEDURE update_all_tables() BEGIN
  DECLARE done BOOLEAN DEFAULT FALSE;
  DECLARE _schema VARCHAR(255);
  DECLARE _table VARCHAR(255);
  DECLARE _column VARCHAR(255);
  DECLARE cur CURSOR FOR SELECT
                           CONCAT('`', REPLACE(table_schema, '`', '``'), '`'),
                           CONCAT('`', REPLACE(table_name, '`', '``'), '`'),
                           CONCAT('`', REPLACE(column_name, '`', '``'), '`')
                         FROM
                           information_schema.columns
                         WHERE
                           table_schema=DATABASE() AND data_type LIKE 'date%';

  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := TRUE;

  OPEN cur;

  columnsLoop: LOOP
    FETCH cur INTO _schema, _table, _column;
    IF done THEN
      LEAVE columnsLoop;
    END IF;   

    SET @sql_update=CONCAT_WS(' ', 'UPDATE', CONCAT(_schema, '.', _table),
                                   'SET', _column, '=', '\'1900-01-01\'',
                                   'WHERE', _column, '=', '\'0000-00-00\'');

    PREPARE stmt FROM @sql_update;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;

  END LOOP columnsLoop;

  CLOSE cur;
END//
DELIMITER ;

Silakan lihat contoh di sini .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP/Apache:PHP Kesalahan fatal:Panggilan ke fungsi yang tidak ditentukan mysql_connect()

  2. Validasi dan penyisipan PHP-Form menggunakan MySql

  3. buat semua bilangan bulat kenaikan otomatis dengan jumlah digit yang sama dengan nol di depan

  4. Tukar nilai dua kolom di antara dua tabel

  5. Haruskah saya menggunakan tipe bidang gumpalan MySQL?