2011-03-11 208 views
19

我有一個列名爲a1,a2...,b1.b2...的表。SQL選擇列名稱,如

如何選擇所有列名爲a%的人?

+0

您正試圖查詢列名稱的列表,並查詢這些列? –

+0

雖然有可能我會強烈建議你不要這樣做。你的問題意味着兩件事情之一1)你不想明確地聲明所有的列(你應該)或2)你不知道你正在查詢的表的模式。如果你不知道表的模式,你將不會有返回的數據集的一致維數...。 – Matthew

+0

@Matthew,謝謝你的評論。我會問一個相關的新手問題。 –

回答

0

你不能使用標準的SQL。列名不被視爲SQL中的數據。

如果您使用具有存儲列名稱,類型等的元數據表的SQL引擎,則可以在該表上選擇。

+8

'select * from information_schema.columns' :) – Blorgbeard

+0

..這是標準的sql,就是我的意思。 – Blorgbeard

+1

@Blorgbeard,你是正確的information_schema是標準的SQL。但是,並不是所有引擎都實現它,並不是所有引擎都使用這個名稱。真的取決於發動機。 –

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

會得到你列的列表,你將要過濾更將其限制到目標表

從那裏,你可以建造一些臨時SQL

+0

thanks.It將是很好,如果一些分貝可以對稱的方式處理列作爲行,就像在Excel中的一個speead表... –

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 

注意,上面的SQL編寫服務器。

+1

謝謝Blorgbeard,我喜歡你還包括一個查詢動態地使用實際列。我處於我的控制之外的桌子上,所以這對我來說非常合適。投了! – Ryan

+0

這太棒了!一定會使用這個。 – CSharper

1

下面是顯示你想要的信息的好辦法:

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 

添加或者之間的任何東西「%%」在主選擇來縮小你想要的表和/或列名。

2

這將顯示你的表名和列名

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

Blorgbeard不得不爲SQL Server一個偉大的答案。如果你有像我這樣的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;