2012-11-15 92 views
164

是否有一个SQL语句可以在表中返回列的类型?SQL语句来获取列类型

+4

还要看RDBMS;例如,SQL Server具有'sys.syscolumns'表。 – LittleBobbyTables

+3

是的,但取决于您使用的是哪种类型的RDBMS,它会有所不同 - SQL是一种语言,而不是数据库产品,此问题依赖于特定产品。如果您的RDBMS拥有它,您将能够在“INFORMATION_SCHEMA.COLUMNS”表中找到这类信息。 – Bridge

回答

255

使用SQL Server:

SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE 
    TABLE_NAME = 'yourTableName' AND 
    COLUMN_NAME = 'yourColumnName' 
+6

仅当您不希望看到相应的列名称时。这只会返回类型。如果您想查看类型所属的列名称,则还需要选择COLUMN_NAME ... – HackyStack

+2

并且如果您的表格不处于默认架构中,那么可以使用AND TABLE_SCHEMA ='yourSchema''扩展条件 – luviktor

+3

是伟大的 - 但它有可能也让它返回列的类型的范围?即'varchar(255)'而不是'varchar'和'int(11)'而不是'int'? – mmcrae

10

在TSQL/MSSQL它看起来像:

SELECT t.name, c.name 
FROM sys.tables t 
JOIN sys.columns c ON t.object_id = c.object_id 
JOIN sys.types y ON y.system_type_id = c.system_type_id 
WHERE t.name = '' 
6

如果你使用MySQL,你可以尝试

SHOW COLUMNS FROM `tbl_name`; 

SHOW COLUMNS on dev.mysql.com

否则,你应该能够做到

DESCRIBE `tbl_name`; 
+1

使用*否则*您的意思是除了MySQL以外的其他RDBMS? – Lamak

+2

是的。 DESCRIBE语法在Oracle中也是有效的,但是MsSQL不会接受这种语法。 – fimas

+0

有关MSSQL和TSQL的方法,请参阅@jTC的答案。 – fimas

3
USE [YourDatabaseName] 
GO 

SELECT column_name 'Column Name', 
data_type 'Data Type' 
FROM information_schema.columns 
WHERE table_name = 'YourTableName' 
GO 

这将返回值的列名,显示你的列的名称,以及这些列的数据类型(整型,VARCHAR处理等)。

40

在TSQL最简单的方法是:

SELECT COLUMN_NAME, DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'yourTableName' 
3

对于IBM DB2

SELECT TYPENAME FROM SYSCAT.COLUMNS WHERE TABSCHEMA='your_schema_name' AND TABNAME='your_table_name' AND COLNAME='your_column_name' 
6
在Oracle SQL

你可以这样做:

SELECT 
    DATA_TYPE 
FROM 
    all_tab_columns 
WHERE 
    table_name = 'TABLE NAME' -- in uppercase 
AND column_name = 'COLUMN NAME' -- in uppercase 
1

在我来说,我需要得到动态SQL(颤栗)的数据类型反正这里是我创建的返回完整的数据类型的函数。例如,而不是返回 '小数',将返回DECIMAL(18,4):dbo.GetLiteralDataType

19

对于SQL Server,该系统存储过程将返回所有表信息,包括列数据类型:

exec sp_help YOURTABLENAME 
+4

我upvoted因为这是虽然不是完全的答案,但提供了有价值的信息给我。例如。在Information架构中找不到的“IsComputed”信息,但我可以在sp_help过程代码中找到并从中复制。 – Christoph

+3

对视图也有作用... –

1

使用TSQL/MSSQL

此查询将让你:表名,字段名,数据类型,数据类型的长度,并允许空值

SELECT TABLE_NAME,COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'your_table_name' 

邻只有需要改变的东西是your_table_name。

0

使用TSQL/MSSQL

可以使用INTO关键字。

SELECT结果变成一个真正的表

例子:select .... INTO real_table_name

sp_help real_table_name 
1

使用此查询来获取模式,表,列,类型,MAX_LENGTH,IS_NULLABLE

SELECT QUOTENAME(SCHEMA_NAME(tb.[schema_id])) AS 'Schema' 
    ,QUOTENAME(OBJECT_NAME(tb.[OBJECT_ID])) AS 'Table' 
    ,C.NAME as 'Column' 
    ,T.name AS 'Type' 
    ,C.max_length 
    ,C.is_nullable 
FROM SYS.COLUMNS C INNER JOIN SYS.TABLES tb ON tb.[object_id] = C.[object_id] 
    INNER JOIN SYS.TYPES T ON C.system_type_id = T.user_type_id 
WHERE tb.[is_ms_shipped] = 0 
ORDER BY tb.[Name] 
3

使用MS SQL的另一种变体:

SELECT TYPE_NAME(system_type_id) 
FROM sys.columns 
WHERE name = 'column_name' 
AND [object_id] = OBJECT_ID('[dbo].[table_name]'); 
0

对于Spark SQL

DESCRIBE [db_name.]table_name column_name