【问题标题】:Search for the Date "0000-00-00 00:00:00" in entire MySQL database?在整个 MySQL 数据库中搜索日期“0000-00-00 00:00:00”?
【发布时间】:2015-11-28 09:06:11
【问题描述】:

我有一个巨大的数据库,在某个表的某处,有一个 datetime 格式的字段被“0000-00-00 00:00:00”值损坏。

如何进行查询,以搜索给定的日期时间值 ex。 “0000-00-00 00:00:00”在整个数据库中的所有表和所有列和行中?

【问题讨论】:

    标签: mysql sql datetime


    【解决方案1】:

    plain mysql我觉得没办法。因此,这取决于您可用的编程语言。办公室。每种语言都支持 mysql 的本机命令,这将允许您编写执行所需搜索的脚本:

    首先,您需要获取所有表:

    SHOW TABLES
    

    https://dev.mysql.com/doc/refman/5.0/en/show-tables.html

    然后,在第一个循环中处理每个表,检索当前表的所有列:

     SHOW COLUMNS FROM tableName WHERE TYPE =  'date' -- Maybe you use other types?
    

    https://dev.mysql.com/doc/refman/5.0/en/show-columns.html

    最后,您可以使用 outertableNameinnercolumnName 来检索结果,您正在寻找:

    SELECT * from tableName WHERE columnName = '0000-00-00 00:00:00';
    

    所以,在脚本方面它可能看起来像这样(伪代码):

    $tables = query("SHOW TABLES");
    foreach($tables as $tableName){
       $columns = query("SHOW COLUMNS FROM $tableName WHERE TYPE =  'date'");
       foreach ($columns AS $columnName) {
          $res = query("SELECT * from $tableName WHERE $columnName = '0000-00-00 00:00:00';");
    
          foreach ($res AS $row){
             echo "Table $tableName has a invalid date in column $columnName for row {$row["id"]}";
          } 
       }
    }
    

    【讨论】:

      【解决方案2】:

      你不能在一个简单的查询中做到这一点,但你可以创建一个为你构造一个复杂的查询;我回答了一个类似的问题here。 在您的情况下,您可能需要在 where 中使用 DATA_TYPE = 'datetime' 条件,而不是链接示例的 column_name 条件。

      【讨论】:

      • 是的,在我的数据库中使用了两种日期格式:日期时间和时间戳
      • @It_Does_Not_Matter 那么它将是IN ('datetime', 'timestamp')
      【解决方案3】:

      你可以试试

      SELECT TOP 1(*) FROM yourTable ORDER BY yourDateTimeColumn

      前 1 行应该是您要查找的值的那一行

      顺便说一句,我认为 SQL 日期不早于 1900 年

      【讨论】:

      • 我有一个庞大的数据库,有很多表。不想手动搜索。
      猜你喜欢
      • 2013-06-09
      • 2017-09-21
      • 2013-07-12
      • 2015-07-19
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多