2011-08-24 41 views
10

我需要編寫一些代碼,只適用於我們的數據庫中的某些領域。具體而言,我正在尋找單個數據庫中DECIMAL類型(12,5)的所有表中的任何字段;MySQL檢索列名在哪裏數據類型== X

如果有任何幫助,我們所有的小數字段都以dec_爲前綴。我可以從所有表中收集所有的小數字段,但是其中有很多不符合我的特定標準,我只需要十進制值,它們的限制是12,5。

我不希望在純SQL或使用PHP這樣做。我們目前使用CakePHP框架來管理我們的項目,儘管我可以在不使用框架的情況下輕鬆完成這項工作。這是收集所需數據的一次性操作,所以我可以繼續審計。

任何幫助非常感謝,感謝您花時間閱讀此。

[編輯]在這裏得到了一些很好的答案,謝謝大家!我可能應該在我的第一篇文章中提到過這一點,但是有什麼辦法可以獲得與每個字段關聯的表名嗎?

回答

18
SELECT 
    TABLE_NAME, 
    COLUMN_NAME 
FROM 
    INFORMATION_SCHEMA.COLUMNS 
WHERE 
    TABLE_SCHEMA = 'db-name' AND 
    DATA_TYPE = 'decimal' AND 
    NUMERIC_PRECISION = 12 AND 
    NUMERIC_SCALE = 5 
+0

這個網站是這麼該死的驚人!非常感謝您快速準確的回覆!我想對你的迴應投票,但可惜我沒有足夠的代表:-( – Zetaphor

+0

但你可以將它標記爲對你的問題的正確答案; – Crack

+2

你也可以只做'COLUMN_TYPE ='decimal(12, 5)'最重要的是,OP將需要訪問'INFORMATION_SCHEMA'數據庫。 – webbiedave

2

您可以嘗試使用以下方法:

$pdo = new PDO(...); 

$sql = "select column_name from 
    information_schema.columns 
    where table_schema='$your_db' and table_name='?' and data_type = 'decimal(12,5)'"; 

foreach($pdo->query("SHOW TABLES;") as $table) { 
    $prepared = $pdo->prepare($sql); 
    $prepared->execute(array($table)); 
    print_R($prepared->fetchAll()) ; 
} 
0

試試這個

SELECT table_name, column_name 
FROM information_schema.columns where data_type = 'INT'