के साथ चयन करें मेरे पास कॉलम नाम a1,a2...,b1.b2...
के साथ एक तालिका है।एसक्यूएल कॉलम नाम के साथ
मैं उन सभी को कॉलम नामों के साथ कैसे चुन सकता हूं जैसे a%
?
के साथ चयन करें मेरे पास कॉलम नाम a1,a2...,b1.b2...
के साथ एक तालिका है।एसक्यूएल कॉलम नाम के साथ
मैं उन सभी को कॉलम नामों के साथ कैसे चुन सकता हूं जैसे a%
?
आप मानक एसक्यूएल के साथ नहीं कर सकते हैं। कॉलम नामों को एसक्यूएल में डेटा की तरह नहीं माना जाता है।
यदि आप एक एसक्यूएल इंजन का उपयोग करते हैं, तो कहें, कॉलम नाम, प्रकार इत्यादि संग्रहीत मेटा-डेटा टेबल, आप इसके बजाय उस तालिका पर चयन कर सकते हैं।
'info_schema.columns' से चुनें * :) – Blorgbeard
.. जो मानक वर्ग है, जो मैं कहना चाहता हूं। – Blorgbeard
@ ब्लॉगरबीर्ड, आप सही जानकारी हैं Ichema मानक एसक्यूएल है। हालांकि, सभी इंजन इसे लागू नहीं करते हैं, और सभी इस नाम का उपयोग नहीं करते हैं। वास्तव में इंजन पर निर्भर करता है। –
SELECT * FROM SysColumns WHERE Name like 'a%'
आप कॉलम की एक सूची प्राप्त होगी, आप और अधिक फिल्टर करने के लिए वहां से अपने लक्ष्य तालिका
तक प्रतिबंधित करना आप कुछ तदर्थ एसक्यूएल
धन्यवाद। यह अच्छा होगा अगर कुछ डीबी पंक्तियों के रूप में एक सममित तरीके से कॉलम का इलाज कर सकें, जैसे एक्सेल में एक स्पीड शीट ... –
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
या तो बीच कुछ भी जोड़ें '%%':
धन्यवाद ब्लॉर्गबीर्ड, मुझे यह पसंद है कि आपने गतिशील रूप से वास्तविक कॉलम का उपयोग करने के लिए एक क्वेरी भी शामिल की है। मैं ऐसी परिस्थिति में हूं जहां कॉलम मेरे नियंत्रण के बाहर टेबल पर बढ़ता है, इसलिए यह मेरे लिए पूरी तरह से काम करता है। वोट दिया! – Ryan
यह बहुत बढ़िया है! निश्चित रूप से इसका उपयोग करेंगे। – CSharper
यहाँ जानकारी है कि आप चाहते हैं प्रदर्शित करने के लिए एक अच्छा तरीका है।
यह आपको तालिका नाम और स्तंभ नाम
select table_name,column_name from information_schema.columns
where column_name like '%breakfast%'
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;
आप कॉलम नामों की सूची के लिए पूछताछ करने की कोशिश कर रहे हैं, और उन स्तंभों से पूछताछ कर रहे हैं? –
हालांकि यह संभव है, मैं आपको ऐसा करने के खिलाफ दृढ़ता से सलाह दूंगा। आपका प्रश्न दो चीजों में से एक का तात्पर्य है 1) कि आप स्पष्ट रूप से अपने सभी कॉलम (जो आपको करना चाहिए) घोषित नहीं करना चाहते हैं या 2) कि आप जिस टेबल से पूछ रहे हैं उसकी स्कीमा नहीं जानते हैं। यदि आप तालिका की स्कीमा नहीं जानते हैं तो आपके पास वापस लौटाए गए डेटासेट की निरंतर आयाम नहीं होगी .... – Matthew
@ मैथ्यू, आपकी टिप्पणी के लिए धन्यवाद। मैं एक संबंधित नौसिखिया सवाल पूछूंगा। –