MySQL 检索数据类型 == X 的列名
Posted
技术标签:
【中文标题】MySQL 检索数据类型 == X 的列名【英文标题】:MySQL retrieve column names where datatype == X 【发布时间】:2011-11-02 22:29:12 【问题描述】:我需要编写一些仅适用于我们数据库中某些字段的代码。具体来说,我正在寻找单个数据库的所有表中 DECIMAL(12,5) 类型的任何字段;
如果有任何帮助,我们所有的十进制字段都以 dec_ 为前缀。我可以从所有表中收集所有十进制字段,但其中有很多不符合我的特定标准,我只需要限制为 12,5 的十进制值。
我不会在纯 SQL 或 php 中执行此操作。我们目前正在使用 CakePHP 框架来管理我们的项目,尽管我可以在不使用框架的情况下轻松地做到这一点。这是收集所需数据的一次性操作,因此我可以继续进行审核。
非常感谢您的帮助,感谢您抽出宝贵时间阅读本文。
[编辑] 在这里得到了一些很好的答案,谢谢大家!我可能应该在我最初的帖子中提到这一点,但是有什么方法可以让我也获得与每个字段关联的表名?
【问题讨论】:
【参考方案1】: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
【讨论】:
这个网站真是太棒了!非常感谢您快速准确的回复!我想投票赞成你的回答,但可惜我还没有足够的代表:-( 你也可以只做COLUMN_TYPE = 'decimal(12,5)'
最重要的是,OP 需要访问INFORMATION_SCHEMA
数据库。
是的,我尽量避免在 longtext
字段上进行字符串搜索,但你是正确的,它会返回相同的结果。
@Zetaphor:你要的列叫TABLE_NAME
更新为每个请求包含TABLE_NAME
。很高兴帮助:)【参考方案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()) ;
【讨论】:
【参考方案3】:试试这个
SELECT table_name, column_name
FROM information_schema.columns where data_type = 'INT'
【讨论】:
以上是关于MySQL 检索数据类型 == X 的列名的主要内容,如果未能解决你的问题,请参考以下文章