在整个MySQL数据库中搜索“0000-00-00 00:00:00”的日期?

时间:2015-09-02 18:07:19

标签: mysql sql datetime

我有一个巨大的数据库,在某个表格的某个地方,有一个日期时间格式的字段已被“0000-00-00 00:00:00”值损坏。

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

3 个答案:

答案 0 :(得分:2)

使用 plain mysql我认为没有办法。所以它取决于您可用的编程语言。 OFC。每种语言都支持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

最后,您可以使用外部 tableName 以及内部 columnName 来检索结果,您正在寻找:

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"]}";
      } 
   }
}

答案 1 :(得分:0)

你可以尝试

选择TOPT(*)FROM yourTable ORDER by yourDateTimeColumn

前1行可能应该是您正在寻找

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

答案 2 :(得分:0)

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