2012-11-15 82 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