SQL-запрос для получения типа столбца

Есть ли инструкция SQL, которая может возвращать тип столбца в таблице?

Ответ 1

Использование SQL Server:

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

Ответ 2

Самый простой способ в TSQL:

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

Ответ 3

Для SQL Server эта системная хранимая процедура возвращает всю информацию таблицы, включая типы столбцов:

exec sp_help YOURTABLENAME

Ответ 4

В 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.user_type_id = c.user_type_id
WHERE t.name = ''

Ответ 5

в oracle SQL вы бы сделали это:

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

Ответ 6

Если вы используете MySQL, вы можете попробовать

SHOW COLUMNS FROM `tbl_name`;

SHOW COLUMNS на dev.mysql.com

В противном случае вы сможете сделать

DESCRIBE `tbl_name`;

Ответ 7

Еще одна вариация с использованием MS SQL:

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

Ответ 8

Использование TSQL/MSSQL

Этот запрос получит вас: имя таблицы, имя столбца, тип данных, длину типа данных и допустимые значения нулей

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

Единственное, что нужно изменить, это ваше_знаковое_имя.

Ответ 9

USE [YourDatabaseName]
GO

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

Это вернет значения Column Name, показывая вам имена столбцов и типы данных этих столбцов (ints, varchars и т.д.).

Ответ 10

Для IBM DB2:

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

Ответ 11

В моем случае мне нужно было получить тип данных для Dynamic SQL (Shudder!) в любом случае, вот функция, которую я создал, которая возвращает полный тип данных. Например, вместо того, чтобы возвращать "десятичный", он возвращает DECIMAL (18,4): dbo.GetLiteralDataType

Ответ 12

Использование TSQL/MSSQL

Вы можете использовать ключевое слово INTO.

Результат SELECT в реальную таблицу

Пример: select .... INTO real_table_name

После

sp_help real_table_name

Ответ 13

Используйте этот запрос для получения схемы, таблицы, столбца, типа, 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]

Ответ 14

SHOW COLUMNS FROM //table_name// ;

Это даст вам информацию обо всех столбцах таблицы.

Ответ 15

Для Spark SQL:

DESCRIBE [db_name.]table_name column_name

Ответ 16

Для Apache Derby, как показано в этом ответе:

select columndatatype from sys.syscolumns
  where referenceid = (
    select tableid from sys.systables
    where tablename = 'YOUR_TABEL_NAME'
    and columnname= 'YOUR_COLUMN_NAME')

Ответ 17

В vb60 вы можете сделать это:

Public Cn As ADODB.Connection
'open connection
Dim Rs As ADODB.Recordset
 Set Rs = Cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, UCase("Table"), UCase("field")))

'и образец (valRs - моя функция для поля rs.fields("CHARACTER_MAXIMUM_LENGTH"). value):

 RT_Charactar_Maximum_Length = (ValRS(Rs, "CHARACTER_MAXIMUM_LENGTH"))
        rt_Tipo = (ValRS(Rs, "DATA_TYPE"))

Ответ 18

Чтобы извлечь фактически объявленные типы данных, например, для использования в динамическом SQL, в ALTER COLUMN, можно использовать что-то вроде этого:

SELECT
    TABLE_NAME, 
    COLUMN_NAME,
    DATA_TYPE
        + CASE WHEN DATA_TYPE IN ('char','nchar','varchar','nvarchar','binary','varbinary')
                    AND CHARACTER_MAXIMUM_LENGTH > 0 THEN
                 COALESCE('('+CONVERT(varchar,CHARACTER_MAXIMUM_LENGTH)+')','')
            ELSE '' END
        + CASE WHEN DATA_TYPE IN ('decimal','numeric') THEN
                COALESCE('('+CONVERT(varchar,NUMERIC_PRECISION)+','+CONVERT(varchar,NUMERIC_SCALE)+')','')
            ELSE '' END
        AS Declaration_Type,
    CASE WHEN IS_NULLABLE='NO' THEN 'NOT ' ELSE '' END + 'NULL' AS Nullable
FROM INFORMATION_SCHEMA.COLUMNS
ORDER BY 1,2

Ответ 19

Поскольку некоторые люди спрашивали о точности и с типом данных, я хотел бы поделиться своим сценарием, который я создал для этой цели.

SELECT TABLE_NAME As 'TableName'
       COLUMN_NAME As 'ColumnName'
       CONCAT(DATA_TYPE, '(', COALESCE(CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, DATETIME_PRECISION, ''), IIF(NUMERIC_SCALE <> 0, CONCAT(', ', NUMERIC_SCALE), ''), ')', IIF(IS_NULLABLE = 'YES', ', null', ', not null')) As 'ColumnType'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE -- ...
ORDER BY 'TableName', 'ColumnName'

Это не идеально, но работает в большинстве случаев.

Использование Sql-Server

Ответ 20

Другой вариант для MS SQL - заменить запрос select на запрос, типы которого вы хотите:

declare @sql varchar(4000);

set @sql = 'select ''hi'' as greeting';

select * from master.sys.dm_exec_describe_first_result_set (@sql, Null, 0);