2011-03-11 75 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;