sql选择列名如

时间:2011-03-11 15:09:53

标签: sql

我有一个列名为a1,a2...,b1.b2...的表。

如何选择列名为a%的所有内容?

8 个答案:

答案 0 :(得分:52)

这将为您提供列表

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 Server编写的。

答案 1 :(得分:4)

您需要使用视图INFORMATION_SCHEMA.COLUMNS

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

要内联行,您可以使用PIVOT和执行EXEC()函数。

答案 2 :(得分:3)

这将显示表名和列名

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

答案 3 :(得分: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

在' %%'之间添加任何内容在主要选择中缩小您想要的表格和/或列名称。

答案 4 :(得分:0)

SELECT * FROM SysColumns WHERE Name like 'a%'

将为您提供列表列表,您需要过滤更多列以将其限制为目标表

从那里你可以构建一些ad-hoc sql

答案 5 :(得分:0)

Blorgbeard对SQL服务器有很好的答案。如果您有像我的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;

答案 6 :(得分:0)

感谢@Blorgbeard的巧妙想法。

顺便说一下,Blorgbeard的查询对我不起作用,所以我对其进行了编辑:

DECLARE @Table_Name as VARCHAR(50) SET @Table_Name = 'MyTable'          -- put here you table name
DECLARE @Column_Like as VARCHAR(20) SET @Column_Like = '%something%'    -- put here you element
DECLARE @sql NVARCHAR(MAX) SET @sql = 'select '

SELECT @sql = @sql + '[' + sys.columns.name + '],'
FROM sys.columns 
JOIN sys.tables ON sys.columns.object_id = tables.object_id
WHERE sys.columns.name like @Column_Like
and sys.tables.name = @Table_Name

SET @sql = left(@sql,len(@sql)-1) -- remove trailing comma
SET @sql = @sql + ' from ' + @Table_Name

EXEC sp_executesql @sql

答案 7 :(得分:-1)

您不能使用标准SQL。列名不会被视为SQL中的数据。

如果您使用的SQL引擎具有存储列名,类型等的元数据表,您可以选择该表。