कॉलम प्रकार पाने के लिए एसक्यूएल स्टेटमेंट


301

क्या कोई SQL कथन है जो किसी तालिका में एक स्तंभ के प्रकार को वापस कर सकता है?


5
RDBMS पर निर्भर करता है; SQL सर्वर में sys.syscolumnsउदाहरण के लिए तालिका है।
LittleBobbyTables - Au Revoir

3
हां, लेकिन यह इस आधार पर अलग होगा कि आप किस प्रकार के आरडीबीएमएस का उपयोग कर रहे हैं - SQL एक भाषा है, डेटाबेस उत्पाद नहीं है, और यह प्रश्न विशिष्ट उत्पाद पर निर्भर करता है। आप INFORMATION_SCHEMA.COLUMNSतालिका में इस प्रकार की जानकारी पा सकेंगे - यदि आपका RDBMS है।
ब्रिज

जवाबों:


460

SQL सर्वर का उपयोग करना:

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

11
केवल यदि आप संबंधित कॉलम नाम नहीं देखना चाहते हैं। यह केवल प्रकारों को लौटाएगा। यदि आप कॉलम का नाम देखना चाहते हैं, तो टाइप करने के लिए आपको COLUMN_NAME का भी चयन करना होगा ...
HackyStack

5
और यदि आपकी तालिका डिफ़ॉल्ट स्कीमा में नहीं है, तो आप इसके साथ शर्त का विस्तार कर सकते हैंAND TABLE_SCHEMA = 'yourSchema'
luviktor

8
यह बहुत अच्छा है - लेकिन क्या यह भी संभव है कि यह कॉलम के प्रकार के लिए सीमा लौटाए? के varchar(255)बजाय varcharऔर के int(11)बजाय int?
डॉन चीडल

13
@mmcrae: इसमें कॉलम का उपयोग करना संभव CHARACTER_MAXIMUM_LENGTHहै INFORMATION_SCHEMA.COLUMNS। बस SELECT * FROM INFORMATION_SCHEMA.COLUMNSउपलब्ध सभी कॉलम देखने के लिए एक करें।
फ्रांसिस पी।

2
अस्थायी तालिकाओं के बारे में क्या?
इल्या गज़मैन

77

TSQL में सबसे आसान तरीका है:

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

44

SQL सर्वर के लिए, यह सिस्टम संग्रहीत कार्यविधि सभी तालिका जानकारी लौटाएगा, जिसमें स्तंभ डेटाटिप्स भी शामिल हैं:

exec sp_help YOURTABLENAME

5
मैं इस बात से उबरा हूं कि हालांकि इसका उत्तर सटीक नहीं है, लेकिन मुझे बहुमूल्य जानकारी प्रदान करता है। उदाहरण के लिए "IsComputed" जानकारी मुझे सूचना स्कीमा में नहीं मिली, लेकिन मैं sp_help प्रक्रिया कोड में पा सकता हूं और वहां से कॉपी कर सकता हूं।
क्रिस्टोफ

2
तालिका नाम चुनें और क्लिक करें Alt+F1.. समान परिणाम देता है।
पुगल

to clearifiy: तालिका या दृश्य नाम का चयन संपादक में किया जाना है और फिर दबाएँ Alt+F1। समाधान ऑब्जेक्ट एक्सप्लोरर में नहीं। यह इस तरह की एक सहायक विशेषता है
Bugybunny

18

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

2
वास्तव में यह JOIN sys.types y ON y.user_type_id = c.user_type_id system_type_id अद्वितीय नहीं है। sys.columns doc
फैब्रिकियो

12

oracle SQL में आप ऐसा करेंगे:

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

9

यदि आप MySQL का उपयोग कर रहे हैं तो आप कोशिश कर सकते हैं

SHOW COLUMNS FROM `tbl_name`;

Dev.mysql.com पर रंगों को दिखाएँ

अन्यथा आपको करने में सक्षम होना चाहिए

DESCRIBE `tbl_name`;

1
अन्यथा आपके साथ MySQL के अलावा अन्य RDBMS का मतलब है?
लामक नोव

2
हाँ। DESCRIBEवाक्य रचना के साथ-साथ Oracle में मान्य है, लेकिन MSSQL इस वाक्य को स्वीकार नहीं करेगा।
फाइमास

MSSQL और TSQL पर विधि के लिए @jTC से उत्तर देखें।
फाइमास

MySQL के नए संस्करण हैं information_schema.COLUMNS
रिक जेम्स

मुझे 3 या 4 कॉलम वाली छोटी तालिकाओं के लिए DESC या DESCRIBE (आपके द्वारा उपयोग किए जाने वाले DBMS पर निर्भर करता है) मिलता है, फिर यह स्तंभ नाम के साथ तालिका संरचना को दिखाता है Nullable ध्वज और बड़ी तालिकाओं के लिए स्तंभ प्रकार हालांकि इसे परिणाम देने में अधिक समय लगता है और यह आपकी जानकारी को खोजने के लिए कठिन है।
वेग


4

TSQL / MSSQL का उपयोग करना

यह क्वेरी आपको मिलेगी: तालिका का नाम, स्तंभ का नाम, डेटा प्रकार, डेटा प्रकार की लंबाई, और स्वीकार्य नल

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

केवल एक चीज जिसे बदलने की आवश्यकता है वह है आपका_अस्तित्व_नाम।


4

उपरोक्त उत्तरों पर निर्माण करने के लिए, स्तंभ डेटा प्रकार को उसी स्वरूप में प्राप्त करना अक्सर उपयोगी होता है, जिसमें आपको कॉलम घोषित करने की आवश्यकता होती है।

उदाहरण के लिए, , 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'

1
यह स्वीकृत उत्तर होना चाहिए था। धन्यवाद, शायद आप हालत जोड़ सकते हैं (t.type = 'U') - सिस्टम टेबल को हटा दें
Iannick

और VARBINARY प्रकारों को आसानी से पहली WHENपंक्ति में जोड़कर पूरा किया जा सकता है :WHEN tp.[name] IN ('varchar', 'char', 'varbinary') THEN...
उलटा इंजीनियर

3
USE [YourDatabaseName]
GO

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

यह कॉलम नाम के मानों को लौटाएगा, जो आपको स्तंभों के नाम और उन स्तंभों के डेटा प्रकारों (इन्ट्स, वर्चर्स, आदि) को दिखाएगा।


3

के लिए IBM DB2 :

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

2

वास्तविक घोषित डेटा प्रकारों को पुनः प्राप्त करने के लिए, उदाहरण के लिए डायनेमिक SQL में ALTER COLUMNs के उपयोग के लिए, कुछ इस तरह से उपयोग किया जा सकता है:

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

1

मेरे मामले में मुझे डायनेमिक SQL (Shudder!) के लिए डेटा प्रकार प्राप्त करने की आवश्यकता थी, वैसे भी यहाँ एक फ़ंक्शन है जो मैंने बनाया है जो पूर्ण डेटा प्रकार लौटाता है। उदाहरण के लिए 'दशमलव' वापस करने के बजाय यह DECIMAL (18,4) लौटाएगा : dbo.GetLiteralDataType


1

TSQL / MSSQL का उपयोग करना

आप INTOकीवर्ड का उपयोग कर सकते हैं ।

SELECTएक वास्तविक तालिका में परिणाम

उदाहरण: select .... INTO real_table_name

उपरांत

sp_help real_table_name

1

स्कीमा, तालिका, कॉलम, प्रकार, अधिकतम_प्रवाह, 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]




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_LTHTH")। मान):

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

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


-1

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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.