【问题标题】:MySQL retrieve column names where datatype == XMySQL 检索数据类型 == X 的列名
【发布时间】:2023-03-16 06:51:01
【问题描述】:

我需要编写一些仅适用于我们数据库中某些字段的代码。具体来说,我正在寻找单个数据库的所有表中 DECIMAL(12,5) 类型的任何字段;

如果有任何帮助,我们所有的十进制字段都以 dec_ 为前缀。我可以从所有表中收集所有十进制字段,但其中有很多不符合我的特定标准,我只需要限制为 12,5 的十进制值。

我不会在纯 SQL 或 PHP 中执行此操作。我们目前正在使用 CakePHP 框架来管理我们的项目,尽管我可以在不使用框架的情况下轻松地做到这一点。这是收集所需数据的一次性操作,因此我可以继续进行审核。

非常感谢您的帮助,感谢您抽出宝贵时间阅读本文。

[编辑] 在这里得到了一些很好的答案,谢谢大家!我可能应该在我最初的帖子中提到这一点,但是有什么方法可以让我也获得与每个字段关联的表名?

【问题讨论】:

    标签: php mysql names sqldatatypes


    【解决方案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'
      

      【讨论】:

        猜你喜欢
        • 2012-08-04
        • 2012-03-04
        • 1970-01-01
        • 2014-10-08
        • 1970-01-01
        • 1970-01-01
        • 2021-12-10
        • 2018-09-14
        • 1970-01-01
        相关资源
        最近更新 更多