2012-11-15 18 views
164

Czy istnieje instrukcja SQL, która może zwrócić typ kolumny w tabeli?Instrukcja SQL, aby uzyskać typ kolumny

+4

Zależy RDBMS; SQL Server ma na przykład tabelę 'sys.syscolumns'. – LittleBobbyTables

+3

Tak, ale będzie się różnić w zależności od typu używanego systemu RDBMS - SQL to język, a nie produkt bazy danych, a to pytanie zależy od konkretnego produktu. Będziesz mógł znaleźć tego rodzaju informacje w tabeli "INFORMATION_SCHEMA.COLUMNS" - jeśli masz go w RDBMS. – Bridge

Odpowiedz

255

Korzystanie z SQL Server:

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

Tylko jeśli nie chcesz wyświetlać odpowiedniej nazwy kolumny. Zwróci to tylko typy. Jeśli chcesz zobaczyć nazwę kolumny, do której należy ten typ, będziesz musiał wybrać COLUMN_NAME również ... – HackyStack

+2

Jeśli twoja tabela nie ma domyślnego schematu, możesz przedłużyć warunek za pomocą 'AND TABLE_SCHEMA = 'yourSchema'' – luviktor

+3

jest świetny - ale czy możliwe jest również zwrócenie zakresu dla typu kolumny? tj. 'varchar (255)' zamiast 'varchar' i' int (11) 'zamiast' int'? – mmcrae

10

w TSQL/MSSQL to wygląda:

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

Jeśli używasz MySQL można spróbować

SHOW COLUMNS FROM `tbl_name`; 

SHOW COLUMNS on dev.mysql.com

przeciwnym razie powinieneś być w stanie zrobić

DESCRIBE `tbl_name`; 
+1

Z * inaczej * masz na myśli inne RDBMS oprócz MySQL? – Lamak

+2

Tak. Składnia "DESCRIBE" jest również poprawna w Oracle, jednak MsSQL nie zaakceptuje tej składni. – fimas

+0

Zobacz odpowiedź z @jTC dla metody na MSSQL i TSQL. – fimas

3
USE [YourDatabaseName] 
GO 

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

Spowoduje to wyświetlenie wartości Nazwa kolumny, pokazującej nazwy kolumn oraz Typy danych tych kolumn (pliki wewnętrzne, varchary itp.).

40

Najłatwiej w TSQL jest:

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

Dla IBM DB2:

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

w Oracle SQL byłoby to zrobić:

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

W moim przypadku potrzebowałem uzyskać typ danych dla Dynamic SQL (Shudder!), Tak czy inaczej tutaj jest funkcja, którą stworzyłem, która zwraca pełny typ danych. Na przykład zamiast wrócić „dziesiętny” byłoby powrócić dziesiętnego (18,4): dbo.GetLiteralDataType

19

dla SQL Server, ta procedura systemu przechowywane powróci wszystkie informacje o tabeli, w tym typów danych kolumn:

exec sp_help YOURTABLENAME 
+4

Podniosłem głos, ponieważ nie jest to dokładnie odpowiedź, ale dostarcza mi cennych informacji. Na przykład. informacje "IsComputed", których nie znalazłem w schemacie Information, ale mogę znaleźć w kodzie procedury sp_help i skopiować z tego. – Christoph

+3

Działa również w widokach ... –

1

Korzystanie TSQL/MSSQL

To zapytanie będzie Ci: nazwa tabeli, nazwę kolumny, typ danych, długość typ danych, a dopuszczalne wartości null

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

ö rzeczą, która musi zostać zmieniona, jest your_table_name.

0

Korzystanie TSQL/MSSQL

Można użyć INTO słowa kluczowego.

Wynikiem SELECT w tabeli i

przykład: select .... INTO real_table_name

Po

sp_help real_table_name 
1

użytkowania tego zapytania uzyskania schematu tabeli, kolumny typ, maksymalna długość, 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

Kolejna zmiana przy użyciu MS SQL:

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

Dla Spark SQL:

DESCRIBE [db_name.]table_name column_name