web-dev-qa-db-ja.com

列型を取得するためのSQL文

テーブル内の列の型を返すことができるSQL文はありますか?

226
daniely

SQL Serverを使用します。

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

TSQLで最も簡単な方法は次のとおりです。

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

SQL Serverの場合、このシステムストアドプロシージャは列データ型を含むすべてのテーブル情報を返します。

exec sp_help YOURTABLENAME
32
Hanif Azhari

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

oracle SQLでは、次のようにします。

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

MySQLを使用しているなら、試すことができます

SHOW COLUMNS FROM `tbl_name`;

dev.mysql.comのショーコラム

そうでなければあなたはできるはずです

DESCRIBE `tbl_name`;
7
fimas

MS SQLを使用したもう1つのバリエーション:

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

TSQL/MSSQLを使用する

テーブル名、列名、データ型、データ型の長さ、および許容されるNULL

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です。

3
csebryam

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

これによりColumn Nameという値が返され、列の名前とそれらの列のデータ型(int、varcharsなど)が表示されます。

3
Kprof

私の場合は、動的SQLのデータ型(Shudder!)を取得する必要がありました。いずれにしても、ここで作成した関数で完全なデータ型を返します。たとえば、 'decimal'を返す代わりにDECIMAL(18,4)を返します。 dbo.GetLiteralDataType

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

テーブルのすべての列に関する情報を提供します。

1
Somil Gupta

このクエリを使用して、スキーマ、テーブル、列、タイプ、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]
1
Jigar Parekh

Apache Derby に示すように この回答

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

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")))

'とsample(valRsはrs.fields( "CHARACTER_MAXIMUM_LENGTH")。value)の関数です。

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

Spark SQL :の場合

DESCRIBE [db_name.]table_name column_name
0
ishwr_

たとえば動的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
0
AjV Jsy

TSQL/MSSQLを使用する

INTOキーワードを使うことができます。

実際のTABLEへのSELECTの結果

例:select .... INTO real_table_name

後に

sp_help real_table_name
0
Geza Bartha

何人かの人々がデータ型と同様に精度を求めていたので、私はそのような目的のために私が作成した私のスクリプトを共有したいと思います。

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を使う

0
Alexander Shuev