我有一个巨大的数据库,在某个表格的某个地方,有一个日期时间格式的字段已被“0000-00-00 00:00:00”值损坏。
如何进行查询,搜索给定的日期时间值ex。 “00:00:00”在所有表格和所有列和行的整个数据库中?
答案 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条件。