sql select avec le nom de la colonne comme

j'ai une table avec des noms de colonne a1,a2...,b1.b2....

Comment puis-je sélectionner tous ceux avec des noms de colonne comme a%?

24
demandé sur Blorgbeard 2011-03-11 18:09:53
la source

7 ответов

vous ne pouvez pas avec le SQL standard. Les noms de colonnes ne sont pas traités comme des données dans SQL.

si vous utilisez un moteur SQL qui a, disons, des tables de méta-données stockant les noms de colonne, les types, etc. vous pouvez choisir sur cette table à la place.

0
répondu Stephen Chung 2011-03-11 18:11:40
la source

vous obtiendrez ainsi la liste

select * from information_schema.columns 
where table_name='table1' and column_name like 'a%'

Si vous souhaitez l'utiliser pour construire une requête, vous pourriez faire quelque chose comme ceci:

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

notez que ce qui précède est écrit pour SQL Server.

45
répondu Blorgbeard 2011-03-11 18:20:56
la source

Vous devez utiliser view INFORMATION_SCHEMA.Colonnes

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

inline lignes, vous pouvez utiliser PIVOT et pour l'exécution EXEC () fonction.

4
répondu Damian Leszczyński - Vash 2011-03-11 18:15:02
la source

ceci vous montrera le nom de la table et le nom de la colonne

select table_name,column_name from information_schema.columns
where column_name like '%breakfast%'
3
répondu Technotronic 2014-08-06 15:31:03
la source

Voici une belle façon d'afficher les informations que vous souhaitez:

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

ajouter quoi que ce soit entre '%%' dans le menu principal pour préciser les tables et/ou les noms de colonne que vous voulez.

1
répondu majestzim 2014-05-17 00:33:17
la source
SELECT * FROM SysColumns WHERE Name like 'a%'

vous obtiendra une liste de colonnes, vous voudrez filtrer plus pour la restreindre à votre table cible

A partir de là vous pouvez construire quelques sql ad hoc

0
répondu Neil N 2011-03-11 18:13:17
la source

Blorgbeard avait une bonne réponse pour SQL server. Si vous avez un serveur MySQL comme le mien alors ce qui suit vous permettra de sélectionner les informations à partir de colonnes où le nom est comme une phrase clé. Vous avez juste à remplacer le nom de la table, le nom de la base de données, et le mot-clé.

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;
0
répondu Aunt Jemima 2016-09-22 20:38:00
la source

Autres questions sur