2015-09-02 73 views

回答

0

你可以嘗試

SELECT TOP 1(*)FROM yourTable ORDER BY yourDateTimeColumn

頂部1行也許應該是一個與你正在尋找

BTW的價值,我認爲SQL日期不早於1900

+0

我有一個龐大的數據庫,有很多表。不想手動搜索它。 –

2

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

你不能在一個簡單的查詢中做到這一點,但你可以爲你構建一個複雜的查詢;我回答了類似的問題here。 就你而言,你可能需要在where中有DATA_TYPE = 'datetime'條件,而不是鏈接示例的column_name條件。

+0

是的,在我的數據庫中有兩種日期格式:日期時間和時間戳 –

+0

@It_Does_Not_Matter然後它會是'IN('datetime','timestamp')' – Uueerdo