Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Xóa tất cả các ngày tháng 0 khỏi cơ sở dữ liệu MySQL trên tất cả các Bảng

Để thay đổi các giá trị hiện tại, bạn có thể sử dụng một truy vấn như sau:

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

Nếu bạn muốn tự động hóa truy vấn CẬP NHẬT, bạn có thể sử dụng một câu lệnh đã chuẩn bị sẵn:

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;

Và bạn có thể lặp qua tất cả các cột trong tất cả các bảng trên lược đồ hiện tại được khai báo là ngày:

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

Để lặp qua tất cả các cột, bạn có thể sử dụng quy trình được lưu trữ:

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 ;

Vui lòng xem ví dụ tại đây .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql và php PDO - điều gì sẽ xảy ra với một giao dịch không giới hạn nếu kết nối đóng đột ngột?

  2. Truy xuất trường UTC DATETIME từ MySQL trong Java khi múi giờ máy chủ không phải là UTC

  3. Định nghĩa trường tốt nhất để lưu trữ số thập phân .NET vào MySQL là gì?

  4. cách sửa biến Không xác định:cộng tác viên trong domPDF trong Laravel

  5. Magento:Thêm thuộc tính sản phẩm bằng tập lệnh cài đặt mô-đun