查找表中的列数


122

可以找到表中的行数:

select count(*) from tablename

是否可以找到表中的列数?

Answers:


204
SELECT COUNT(*)
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE table_catalog = 'database_name' -- the database
   AND table_name = 'table_name'

1
嗨,我下架不能,这里的信息,可以请你再次给我查询..表名称=后列= PostingID,PostingDate,身体
praveenjayapal

2
除非我感到困惑,否则您要查找表中有多少列。如果执行下面的查询,它将返回3(假设只列PostingId,PostingDate和正文)SELECT COUNT(*)FROM INFORMATION_SCHEMA.COLUMNS在表格名=“后”
内森·库普

10
我认为您需要用“ TABLE_CATALOG”替换上面的“ table_schema”作为变量“ database_name”
Harvey Darvey

在MySQL领域(在问题中被标记)... MySQL database等同schema于ANSI SQL,并且table_catalog始终是def
Steve Buzonas

1
“ table_catalog”需要更改为“
TABLE_SCHEMA

39
SELECT COUNT(COLUMN_NAME) 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE 
    TABLE_CATALOG = 'Database name' 
    AND TABLE_SCHEMA = 'dbo' 
    AND TABLE_NAME = 'table name'

1
这样的回答完美的作品,至少与Microsoft SQL Server
安东尼奥·塞拉诺


6

在Java中使用JDBC:

    String quer="SELECT * FROM sample2";

    Statement st=con.createStatement();
    ResultSet rs=st.executeQuery(quer);
    ResultSetMetaData rsmd = rs.getMetaData();
    int NumOfCol=0;
    NumOfCol=rsmd.getColumnCount();
    System.out.println("Query Executed!! No of Colm="+NumOfCol);

2
这是一种很好的通用方法(与RDBMS无关)。我只建议将查询更改为SELECT * FROM sample2 WHERE 1=2。这样,您可以获得模式但没有数据,这可能会增加不必要的开销。
Cascader

5

来晚了,但请从我这里拿走...

在编辑器(“新建查询”)中,通过选择数据库对象,它也可以是一个表,如果我们使用快捷键Alt + F1,我们将获得该对象的所有信息,并且我想也可以解决您的问题。



4

好吧,我尝试了内森·库普(Nathan Koop)的答案,但它对我没有用。我将其更改为以下内容,它确实起作用了:

SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'table_name'

如果我USE 'database_name'也不放,那也没用WHERE table_catalog = 'database_name' AND table_name' = 'table_name'。实际上,我很高兴知道为什么。


USE database_name设置默认数据库,因此您在发出的任何语句中都不需要限定表名。在这里,您columns通过说它在information_schema中来限定表名。table_catalog存在于mysql中纯粹是为了与其他数据库兼容,这与table_schema-参见该答案下的注释不一样。
Paul Campbell

3

或使用sys.columns

--SQL 2005
SELECT  *
FROM    sys.columns
WHERE   OBJECT_NAME(object_id) = 'spt_values'
-- returns 6 rows = 6 columns

--SQL 2000
SELECT  *
FROM    syscolumns
WHERE   OBJECT_NAME(id) = 'spt_values'
-- returns 6 rows = 6 columns

SELECT  *
FROM    dbo.spt_values
    -- 6 columns indeed

从INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='<YOURTABLENAME>'中选择COUNT(*)
Rudy Hinojosa

2
SELECT COUNT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE 
TABLE_CATALOG = 'database_name' AND TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'table_name'

2

只需使用3条简单的PHP代码行,就可以找到表中的列数。

$sql="SELECT * FROM table";
$query=mysqli_query($connect_dude,$sql);    
$num=mysqli_num_fields($query);

$numcolumns在这种情况下将返回给定表的数量。

希望对别人有帮助。


1

查询以计算表中的列数:

select count(*) from user_tab_columns where table_name = 'tablename';

将tablename替换为要返回其总列数的表的名称。


它也适用于MYSQL



1

db2 'describe table "SCHEMA_NAME"."TBL_NAME"'


1
尽管这可能会解决原始问题,但最好添加说明,以便我们知道发生了什么。
Tedinoz

1
请不要只发布代码作为答案,还请说明您的代码的作用以及它如何解决问题。带有解释的答案通常质量更高,并且更有可能吸引投票。
Suraj Kumar

0

以下查询查找表中的列:-

 SELECT COUNT(COLUMN_NAME) FROM USER_TAB_COLUMNS
 WHERE TABLE_NAME = 'TableName';

0

一个MySQL答案略微改编自MSDN示例中的MySqlDataReader.GetValues

//assumes you've already created a connection, opened it, 
//and executed a query to a reader

while(reader.Read())
{
    Object[] values = new Object[reader.FieldCount];
    int fieldCount = reader.GetValues(values);

    Console.WriteLine("\nreader.GetValues retrieved {0} columns.",   fieldCount);
    for (int i = 0; i < fieldCount; i++)
        Console.WriteLine(values[i]);
}

使用MySqlDataReader.FieldCount将允许您检索查询的行中的列数。


0
SELECT TABLE_SCHEMA
    , TABLE_NAME
    , number = COUNT(*) 
FROM INFORMATION_SCHEMA.COLUMNS
GROUP BY TABLE_SCHEMA, TABLE_NAME;

这个为我工作。


0

由于所有答案都在使用中COUNT(),因此您还可以使用MAX()来获取特定表中的列数,如下所示:

SELECT MAX(ORDINAL_POSITION) NumberOfColumnsInTable
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'YourDatabaseNameHere'
      AND 
      TABLE_SCHEMA = 'YourSchemaNameHere'
      AND
      TABLE_NAME = 'YourTableNameHere';

看到 The INFORMATION_SCHEMA COLUMNS Table


-1

这是使用Python 3,sqlite3和pragma语句获取大量表列的方法:

con = sqlite3.connect(":memory:")    
con.execute("CREATE TABLE tablename (d1 VARCHAR, d2 VARCHAR)")
cur = con.cursor()
cur.execute("PRAGMA table_info(tablename)")
print(len(cur.fetchall()))

资源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.