web-dev-qa-db-fra.com

Instruction SQL pour obtenir le type de colonne

Existe-t-il une instruction SQL pouvant renvoyer le type d'une colonne dans une table?

215
daniely

Utilisation de SQL Server:

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

Le moyen le plus simple dans TSQL est:

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

Pour SQL Server, cette procédure stockée système renverra toutes les informations de la table, y compris les types de données de colonne:

exec sp_help YOURTABLENAME
30
Hanif Azhari

En SQL/MSSQL cela ressemble à:

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 = ''
12
jTC

dans Oracle SQL, vous feriez ceci:

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

Si vous utilisez MySQL, vous pouvez essayer

SHOW COLUMNS FROM `tbl_name`;

MONTRER LES COLONNES sur dev.mysql.com

Sinon, vous devriez pouvoir faire

DESCRIBE `tbl_name`;
7
fimas

Une autre variante utilisant MS SQL:

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

Pour IBM DB2

SELECT TYPENAME FROM SYSCAT.COLUMNS WHERE TABSCHEMA='your_schema_name' AND TABNAME='your_table_name' AND COLNAME='your_column_name'
3
Aman
USE [YourDatabaseName]
GO

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

Cela renverra les valeurs Nom de colonne, qui vous montreront les noms des colonnes et les types de données de ces colonnes (ints, varchars, etc.).

3
Kprof

Utilisation de TSQL/MSSQL

Cette requête vous permettra d'obtenir: le nom de la table, le nom de la colonne, le type de données, la longueur du type de données et les valeurs NULL autorisées

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

La seule chose à changer est votre_nom_table.

2
csebryam

Dans mon cas, j’avais besoin d’obtenir le type de données pour le SQL dynamique (Shudder!). Voici une fonction que j’ai créée qui renvoie le type de données complet. Par exemple, au lieu de renvoyer 'décimal', il renverrait DECIMAL (18,4): dbo.GetLiteralDataType

1
Anthony Griggs
SHOW COLUMNS FROM //table_name// ;

Il vous donnera des informations sur toutes les colonnes de la table.

1
Somil Gupta

Utilisez cette requête pour obtenir Schema, Table, Column, Type, longueur_max, 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]
1
Jigar Parekh

Pour Apache Derby comme indiqué dans cette réponse :

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

Dans vb60, vous pouvez faire ceci:

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

'and sample (valRs est ma fonction pour rs.fields ("CHARACTER_MAXIMUM_LENGTH"). value):

 RT_Charactar_Maximum_Length = (ValRS(Rs, "CHARACTER_MAXIMUM_LENGTH"))
        rt_Tipo = (ValRS(Rs, "DATA_TYPE"))
0
R.Alonso

Pour Spark SQL :

DESCRIBE [db_name.]table_name column_name
0
ishwr_

Pour récupérer les types de données déclarés réels, par exemple pour une utilisation dans SQL dynamique vers ALTER COLUMN, vous pouvez utiliser quelque chose comme ceci:

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
0
AjV Jsy

Utilisation de TSQL/MSSQL

Vous pouvez utiliser le mot clé INTO.

Le résultat de SELECT dans un réel TABLE

Exemple: select .... INTO real_table_name

Après

sp_help real_table_name
0
Geza Bartha

Comme certaines personnes demandaient également la précision du type de données, j'aimerais partager le script que j'ai créé à cette fin.

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'

Ce n'est pas parfait, mais cela fonctionne dans la plupart des cas.

Utiliser Sql-Server

0
Alexander Shuev