我有一个列名为a1,a2...,b1.b2...
的表。
如何选择列名为a%
的所有内容?
答案 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%'
答案 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引擎具有存储列名,类型等的元数据表,您可以选择该表。