Подтвердить что ты не робот

Sql select с именем столбца

У меня есть таблица с именами столбцов a1,a2...,b1.b2....

Как я могу выбрать все имена столбцов, например a%?

4b9b3361

Ответ 1

Вы не можете со стандартным SQL. Имена столбцов не обрабатываются как данные в SQL.

Если вы используете механизм SQL, который имеет, скажем, таблицы метаданных, хранящие имена столбцов, типы и т.д., вы можете выбрать вместо этого таблицу.

Ответ 2

Это даст вам список

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.

Ответ 3

Вам нужно использовать представление INFORMATION_SCHEMA.COLUMNS

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

В строковые строки вы можете использовать PIVOT и для исполнения EXEC().

Ответ 4

Это покажет вам имя таблицы и имя столбца

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

Ответ 5

Вот хороший способ отображения необходимой информации:

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

Добавьте что-либо между "%%" в основном элементе выбора, чтобы сузить список таблиц и/или столбцов, которые вы хотите.

Ответ 6

SELECT * FROM SysColumns WHERE Name like 'a%'

Вы получите список столбцов, вам нужно будет фильтровать больше, чтобы ограничить его целевой таблицей.

Оттуда вы можете создать какой-нибудь ad-hoc sql

Ответ 7

У 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;