У меня есть таблица с именами столбцов a1,a2...,b1.b2...
.
Как я могу выбрать все имена столбцов, например a%
?
У меня есть таблица с именами столбцов a1,a2...,b1.b2...
.
Как я могу выбрать все имена столбцов, например a%
?
Вы не можете со стандартным SQL. Имена столбцов не обрабатываются как данные в SQL.
Если вы используете механизм SQL, который имеет, скажем, таблицы метаданных, хранящие имена столбцов, типы и т.д., вы можете выбрать вместо этого таблицу.
Это даст вам список
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.
Вам нужно использовать представление INFORMATION_SCHEMA.COLUMNS
select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = my_table_name AND COLUMN_NAME like 'a%'
В строковые строки вы можете использовать PIVOT и для исполнения EXEC().
Это покажет вам имя таблицы и имя столбца
select table_name,column_name from information_schema.columns
where column_name like '%breakfast%'
Вот хороший способ отображения необходимой информации:
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
Добавьте что-либо между "%%" в основном элементе выбора, чтобы сузить список таблиц и/или столбцов, которые вы хотите.
SELECT * FROM SysColumns WHERE Name like 'a%'
Вы получите список столбцов, вам нужно будет фильтровать больше, чтобы ограничить его целевой таблицей.
Оттуда вы можете создать какой-нибудь ad-hoc sql
У 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;