2011-03-11 21 views
19

के साथ चयन करें मेरे पास कॉलम नाम a1,a2...,b1.b2... के साथ एक तालिका है।एसक्यूएल कॉलम नाम के साथ

मैं उन सभी को कॉलम नामों के साथ कैसे चुन सकता हूं जैसे a%?

+0

आप कॉलम नामों की सूची के लिए पूछताछ करने की कोशिश कर रहे हैं, और उन स्तंभों से पूछताछ कर रहे हैं? –

+0

हालांकि यह संभव है, मैं आपको ऐसा करने के खिलाफ दृढ़ता से सलाह दूंगा। आपका प्रश्न दो चीजों में से एक का तात्पर्य है 1) कि आप स्पष्ट रूप से अपने सभी कॉलम (जो आपको करना चाहिए) घोषित नहीं करना चाहते हैं या 2) कि आप जिस टेबल से पूछ रहे हैं उसकी स्कीमा नहीं जानते हैं। यदि आप तालिका की स्कीमा नहीं जानते हैं तो आपके पास वापस लौटाए गए डेटासेट की निरंतर आयाम नहीं होगी .... – Matthew

+0

@ मैथ्यू, आपकी टिप्पणी के लिए धन्यवाद। मैं एक संबंधित नौसिखिया सवाल पूछूंगा। –

उत्तर

0

आप मानक एसक्यूएल के साथ नहीं कर सकते हैं। कॉलम नामों को एसक्यूएल में डेटा की तरह नहीं माना जाता है।

यदि आप एक एसक्यूएल इंजन का उपयोग करते हैं, तो कहें, कॉलम नाम, प्रकार इत्यादि संग्रहीत मेटा-डेटा टेबल, आप इसके बजाय उस तालिका पर चयन कर सकते हैं।

+8

'info_schema.columns' से चुनें * :) – Blorgbeard

+0

.. जो मानक वर्ग है, जो मैं कहना चाहता हूं। – Blorgbeard

+1

@ ब्लॉगरबीर्ड, आप सही जानकारी हैं Ichema मानक एसक्यूएल है। हालांकि, सभी इंजन इसे लागू नहीं करते हैं, और सभी इस नाम का उपयोग नहीं करते हैं। वास्तव में इंजन पर निर्भर करता है। –

0
SELECT * FROM SysColumns WHERE Name like 'a%' 

आप कॉलम की एक सूची प्राप्त होगी, आप और अधिक फिल्टर करने के लिए वहां से अपने लक्ष्य तालिका

तक प्रतिबंधित करना आप कुछ तदर्थ एसक्यूएल

+0

धन्यवाद। यह अच्छा होगा अगर कुछ डीबी पंक्तियों के रूप में एक सममित तरीके से कॉलम का इलाज कर सकें, जैसे एक्सेल में एक स्पीड शीट ... –

4

आप उपयोग करने की आवश्यकता का निर्माण कर सकते चाहते हैं दृश्य INFORMATION_SCHEMA.COLUMNS

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = my_table_name AND COLUMN_NAME like 'a%' 

पंक्तियों आप PIVOT उपयोग कर सकते हैं इनलाइन और निष्पादन EXEC() समारोह के लिए करते हैं।

41

select * from information_schema.columns 
where table_name='table1' and column_name like 'a%' 

आप उपयोग करना है कि एक प्रश्न के निर्माण के लिए चाहते हैं, आप कुछ इस तरह कर सकता है यह आपको सूची मिलेगी:

declare @sql nvarchar(max) 
set @sql = 'select ' 
select @sql = @sql + '[' + column_name +'],' 
from information_schema.columns 
where table_name='table1' and column_name like 'a%' 
set @sql = left(@sql,len(@sql)-1) -- remove trailing comma 
set @sql = @sql + ' from table1' 
exec sp_executesql @sql 

ध्यान दें कि ऊपर एसक्यूएल के लिए लिखा है सर्वर। क्या तालिकाओं और/या स्तंभ नाम आप चाहते हैं को कम करने के लिए मुख्य चयन में

SELECT B.table_catalog as 'Database_Name', 
     B.table_name as 'Table_Name', 
     stuff((select ', ' + A.column_name 
       from INFORMATION_SCHEMA.COLUMNS A 
       where A.Table_name = B.Table_Name 
       FOR XML PATH(''),TYPE).value('(./text())[1]','NVARCHAR(MAX)') 
       , 1, 2, '') as 'Columns' 
    FROM INFORMATION_SCHEMA.COLUMNS B 
    WHERE B.TABLE_NAME like '%%' 
     AND B.COLUMN_NAME like '%%' 
    GROUP BY B.Table_Catalog, B.Table_Name 
    Order by 1 asc 

या तो बीच कुछ भी जोड़ें '%%':

+1

धन्यवाद ब्लॉर्गबीर्ड, मुझे यह पसंद है कि आपने गतिशील रूप से वास्तविक कॉलम का उपयोग करने के लिए एक क्वेरी भी शामिल की है। मैं ऐसी परिस्थिति में हूं जहां कॉलम मेरे नियंत्रण के बाहर टेबल पर बढ़ता है, इसलिए यह मेरे लिए पूरी तरह से काम करता है। वोट दिया! – Ryan

+0

यह बहुत बढ़िया है! निश्चित रूप से इसका उपयोग करेंगे। – CSharper

1

यहाँ जानकारी है कि आप चाहते हैं प्रदर्शित करने के लिए एक अच्छा तरीका है।

2

यह आपको तालिका नाम और स्तंभ नाम

select table_name,column_name from information_schema.columns 
where column_name like '%breakfast%' 
0

Blorgbeard एसक्यूएल सर्वर के लिए एक महान जवाब था दिखाएगा। यदि आपके पास मेरा जैसे MySQL सर्वर है तो निम्नलिखित आपको कॉलम से जानकारी चुनने की अनुमति देगा जहां नाम कुछ महत्वपूर्ण वाक्यांश की तरह है। आपको बस टेबल नाम, डेटाबेस नाम और कीवर्ड को प्रतिस्थापित करना होगा।

SET @columnnames = (SELECT concat("`",GROUP_CONCAT(`COLUMN_NAME` SEPARATOR "`, `"),"`") 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='your_database' 
    AND `TABLE_NAME`='your_table' 
    AND COLUMN_NAME LIKE "%keyword%"); 

SET @burrito = CONCAT("SELECT ",@columnnames," FROM your_table"); 

PREPARE result FROM @burrito; 
EXECUTE result; 
संबंधित मुद्दे