通过表名和字段名查询字段类型

本文分享了如何使用SQL语句通过表名和字段名获取字段类型的技巧,解决了数据库知识匮乏的问题。

        今天遇到了一个问题,就是要通过表名和字段名获取该字段的字段类型。网上找了好多方法,都不成功(本人的数据库方面的知识比较匮乏奋斗)。后来,终于找到一个正确的语句,特此记录。

       

    select data_type from user_tab_columns where table_name ='表名' and column_name ='字段名'


 

<think>我们正在使用PostgreSQL,需要查询字段名。在PostgreSQL中,字段名存储在系统目录中。 主要涉及的系统有: - `information_schema.tables`:存储的信息 - `information_schema.columns`:存储列(字段)的信息 要查询当前数据库中的所有,可以使用: SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'; -- 假设我们只查询public模式下的查询某个字段名,可以使用: SELECT column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'your_table_name'; 但是,用户的问题是同时查询字段名,可能是想要每个及其包含的字段列。这可以通过连接两个来实现,或者分别查询然后组合。不过通常我们会分别查询,因为一个有多个字段,所以结果会是一个对应多个字段名的多行。 我们可以使用如下查询获取当前数据库中所有及其字段名(public模式): SELECT t.table_name, c.column_name FROM information_schema.tables t INNER JOIN information_schema.columns c ON t.table_name = c.table_name AND t.table_schema = c.table_schema WHERE t.table_schema = 'public' AND t.table_type = 'BASE TABLE' ORDER BY t.table_name, c.ordinal_position; 注意:我们过滤了基本(BASE TABLE),排除了视图等。同时按照字段在中的顺序排序。 但是,如果用户只想查询某个特定字段名,或者想分别列出所有每个的字段,那么上述查询会返回每个的每一列一行。 如果用户想要的是每个的所有字段名在一行内显示(例如,逗号分隔),则可以使用string_agg函数。但是问题没有明确要求,所以我们先提供分别查询字段名的方法,以及联合查询得到每个及其字段(每行一个字段)的方法。 根据问题,用户可能只需要两个独立的查询(一个查,一个查某个字段名),也可能需要联合查询。由于问题描述是“查询以及字段名”,我们可以理解为两个需求:查询所有,以及查询某个(或所有)的字段名。 但为了全面,我们提供两个常用查询: 1. 查询当前数据库中所有(public模式): SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE'; 2. 查询某个特定(例如为'table1')的所有字段名: SELECT column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'table1' ORDER BY ordinal_position; 3. 查询所有及其所有字段名(每行一个对应的一个字段名): SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'public' ORDER BY table_name, ordinal_position; 注意:第三个查询会列出所有(在public模式下的)的每个字段,每个字段一行,重复的会出现在多行。 如果用户想要将每个的所有字段名聚合成一个列(一行一个字段名用逗号分隔),则可以使用: SELECT table_name, STRING_AGG(column_name, ', ' ORDER BY ordinal_position) AS columns FROM information_schema.columns WHERE table_schema = 'public' GROUP BY table_name ORDER BY table_name; 由于问题没有具体说明格式,我们提供多种方式供选择。 现在,根据要求,在回答后提出3-5个相关问题。 </think>### PostgreSQL 查询字段名的方法 在 PostgreSQL 中,可通过系统 `information_schema` 或 `pg_catalog` 查询元数据: #### 1. 查询所有(当前数据库) ```sql SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'; -- 仅查询 public 模式 ``` #### 2. 查询特定的所有字段名 ```sql SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'your_table_name'; -- 替换为实际 ``` #### 3. 同时查询所有及其字段(扩展方案) ```sql SELECT t.table_name, STRING_AGG(c.column_name || ' (' || c.data_type || ')', ', ') AS columns FROM information_schema.tables t JOIN information_schema.columns c ON t.table_name = c.table_name AND t.table_schema = c.table_schema WHERE t.table_schema = 'public' GROUP BY t.table_name; ``` #### 示例输出: ``` table_name | columns ------------|--------------------------------------- users | id (integer), name (varchar), age (int) orders | order_id (int), product (text), ... ``` #### 注意事项: - 替换 `public` 可查询其他模式 - 添加 `ORDER BY ordinal_position` 可保持字段原始顺序 - 使用 `pg_catalog.pg_attribute` 需更高权限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值