Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

सभी तालिकाओं में MySQL डेटाबेस से सभी शून्य तिथियां हटाएं

मौजूदा मूल्यों को बदलने के लिए आप इस तरह की क्वेरी का उपयोग कर सकते हैं:

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

यदि आप अद्यतन क्वेरी को स्वचालित करना चाहते हैं तो आप तैयार कथन का उपयोग कर सकते हैं:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सिंक से बाहर आदेश; अब आप इस कमांड को नहीं चला सकते SQL

  2. MySQL 5.7 से MySQL 8 में अपग्रेड करने के लिए टिप्स

  3. ऑनलाइन/ऑफ़लाइन डेटाबेस सिंक्रोनाइज़ेशन - MySQL/PHP

  4. MySQL में पिछले सप्ताह का डेटा कैसे खोजें

  5. MySQL में कई स्कीमाओं के बीच क्रॉस जॉइन करें। विशेषाधिकार और प्रदर्शन