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 的列名的主要内容,如果未能解决你的问题,请参考以下文章

MySQL几种常用的建表语句

Mysql基础语法

DDL语言(MySQL表的管理)

mysql

MySQL基础2

mysql中的一些知识点