387

テーブルの列の型を返すことができるSQLステートメントはありますか?

4

26 に答える 26

583

SQL Serverの使用:

SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE 
     TABLE_SCHEMA = 'yourSchemaName' AND
     TABLE_NAME   = 'yourTableName' AND 
     COLUMN_NAME  = 'yourColumnName'
于 2012-11-15T20:31:00.257 に答える
99

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

SELECT COLUMN_NAME, DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'yourTableName'
于 2012-11-15T20:31:05.863 に答える
55

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

exec sp_help YOURTABLENAME
于 2015-09-09T08:44:07.943 に答える
24

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 = ''
于 2012-11-15T20:27:13.137 に答える
18

MySQLを使用している場合は、試すことができます

SHOW COLUMNS FROM `tbl_name`;

dev.mysql.comで列を表示する

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

DESCRIBE `tbl_name`;
于 2012-11-15T20:28:03.493 に答える
14

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

SELECT
    DATA_TYPE
FROM
    all_tab_columns 
WHERE
    table_name = 'TABLE NAME' -- in uppercase
AND column_name = 'COLUMN NAME' -- in uppercase
于 2014-09-08T12:36:40.267 に答える
12

上記の回答に基づいて構築するには、列を宣言する必要があるのと同じ形式で列のデータ型を取得すると便利なことがよくあります。

たとえばvarchar(50)、、、。varchar(max)_decimal(p, s)

これにより、次のことが可能になります。

SELECT 
  [Name]         = c.[name]
, [Type]         = 
    CASE 
      WHEN tp.[name] IN ('varchar', 'char') THEN tp.[name] + '(' + IIF(c.max_length = -1, 'max', CAST(c.max_length AS VARCHAR(25))) + ')' 
      WHEN tp.[name] IN ('nvarchar','nchar') THEN tp.[name] + '(' + IIF(c.max_length = -1, 'max', CAST(c.max_length / 2 AS VARCHAR(25)))+ ')'      
      WHEN tp.[name] IN ('decimal', 'numeric') THEN tp.[name] + '(' + CAST(c.[precision] AS VARCHAR(25)) + ', ' + CAST(c.[scale] AS VARCHAR(25)) + ')'
      WHEN tp.[name] IN ('datetime2') THEN tp.[name] + '(' + CAST(c.[scale] AS VARCHAR(25)) + ')'
      ELSE tp.[name]
    END
, [RawType]      = tp.[name]
, [MaxLength]    = c.max_length
, [Precision]    = c.[precision]
, [Scale]        = c.scale
FROM sys.tables t 
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types tp ON c.user_type_id = tp.user_type_id
WHERE s.[name] = 'dbo' AND t.[name] = 'MyTable'
于 2019-11-22T13:22:49.103 に答える
10

MS SQLを使用した別のバリエーション:

SELECT TYPE_NAME(system_type_id) 
FROM sys.columns 
WHERE name = 'column_name'
AND [object_id] = OBJECT_ID('[dbo].[table_name]');
于 2016-10-18T13:06:23.137 に答える
8

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

于 2015-12-31T20:16:28.910 に答える
7

これは、列名とそれぞれの文字タイプのみを選択するためにも機能します

SELECT COLUMN_NAME ,DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Items';   
于 2021-02-22T14:30:20.773 に答える
4

たとえば、動的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
于 2018-12-13T14:50:30.463 に答える
3
USE [YourDatabaseName]
GO

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

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

于 2012-11-15T20:30:13.520 に答える
3

IBM DB2の場合:

SELECT TYPENAME FROM SYSCAT.COLUMNS WHERE TABSCHEMA='your_schema_name' AND TABNAME='your_table_name' AND COLNAME='your_column_name'
于 2014-02-14T07:13:17.880 に答える
3

TSQL/MSSQLの使用

INTOキーワードを使用できます。

の結果をSELECT実際のテーブルに

例:select .... INTO real_table_name

sp_help real_table_name
于 2016-05-04T08:00:34.910 に答える
2

MS SQLのもう1つのオプションは、selectここでのクエリを、次のタイプのクエリに置き換えることです。

declare @sql varchar(4000);

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

select * from master.sys.dm_exec_describe_first_result_set (@sql, Null, 0);
于 2019-10-10T12:40:10.057 に答える
2

このクエリを使用する

SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TABLE_NAME'
ORDER BY ORDINAL_POSITION
于 2020-07-29T11:58:22.190 に答える
2

SQL Server 2012以降:

SELECT * FROM sys.dm_exec_describe_first_result_set( N'SELECT * FROM [my].[Table]', NULL, 0 );
于 2021-03-26T12:30:59.317 に答える
1

私の場合、Dynamic SQL(Shudder!)のデータ型を取得する必要がありました。とにかく、完全なデータ型を返す関数を作成しました。たとえば、「decimal」を返す代わりに、DECIMAL(18,4)を返します。dbo.GetLiteralDataType

于 2015-07-29T17:23:42.393 に答える
1

このクエリを使用して、Schema、Table、Column、Type、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]
于 2016-05-10T17:26:58.967 に答える
1
SHOW COLUMNS FROM //table_name// ;

テーブルのすべての列に関する情報が表示されます。

于 2018-08-29T09:15:46.633 に答える
0

Spark SQLの場合:

DESCRIBE [db_name.]table_name column_name
于 2018-02-23T18:15:53.037 に答える
0

この回答に示されているApacheDerbyの場合:

select columndatatype from sys.syscolumns
  where referenceid = (
    select tableid from sys.systables
    where tablename = 'YOUR_TABEL_NAME'
    and columnname= 'YOUR_COLUMN_NAME')
于 2018-06-08T15:07:46.513 に答える
0

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"))
于 2018-10-16T16:11:34.477 に答える
0

データ型の精度も求められる方もいらっしゃるので、そのために作成したスクリプトを共有したいと思います。

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

于 2019-01-18T17:09:16.767 に答える
0

これは、特に集計または複数のテーブルを使用する場合のクエリに役立ちます(SQL Server)

DECLARE @query nvarchar(max) = 'select * from yourtable';
EXEC sp_describe_first_result_set @query, null, 0; 
于 2020-10-21T10:12:40.653 に答える
0

誰かがこれが役に立つと思ったとしても。SQL Serverの場合:

      sp_columns 'yourtablename'

これにより、すべての列の詳細が表示されます。column_name、data_type、type_name、precision、length、iss_nullableなどが表示されます。

于 2021-04-06T20:19:34.783 に答える