sql >> データベース >  >> RDS >> Mysql

すべてのテーブルのMySQLデータベースからすべてのゼロ日付を削除します

    既存の値を変更するには、次のようなクエリを使用できます:

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

    UPDATEクエリを自動化する場合は、プリペアドステートメントを使用できます:

    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;
    

    また、日付として宣言されている現在のスキーマのすべてのテーブルのすべての列をループできます:

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

    すべての列をループするには、ストアドプロシージャを使用できます:

    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 ;
    

    こちら の例をご覧ください。 。



    1. グループ化/集約中に配列値を連結/マージします

    2. ORDERBYとLIMITを使用したUPDATEがMYSQLで機能しない

    3. SELECT INTO OUTFILEを使用するときにヘッダーを含めますか?

    4. PHP:mysql_fetch_array()は、パラメーター1がリソースであり、ブール値が指定されていることを想定しています。