2011-03-11 17 views
19

Ho una tabella con i nomi delle colonne a1,a2...,b1.b2....sql selezionare con nome colonna come

Come posso selezionare tutti quelli con nomi di colonna come a%?

+0

si sta tentando di eseguire una query per un elenco di nomi di colonne e interrogare tali colonne? –

+0

Anche se è possibile, ti consiglio vivamente di non farlo. La tua domanda implica una delle due cose 1) Che non vuoi dichiarare esplicitamente tutte le tue colonne (che dovresti) o 2) Che non conosci lo schema della tabella che stai interrogando. Se non si conosce lo schema della tabella non si avrà una dimensionalità coerente del set di dati restituito .... – Matthew

+0

@Matthew, grazie per il tuo commento. Chiederò una domanda relativa ai principianti. –

risposta

0

Non è possibile con SQL standard. I nomi delle colonne non sono trattati come dati in SQL.

Se si utilizza un motore SQL che contiene, ad esempio, tabelle meta-dati che memorizzano nomi di colonne, tipi, ecc., È possibile selezionare su tale tabella.

+8

'select * from information_schema.columns' :) – Blorgbeard

+0

.. che è sql standard, è ciò che intendevo dire. – Blorgbeard

+1

@Blorgbeard, sei corretto information_schema è standard SQL. Tuttavia, non tutti i motori lo implementano, e non tutti usano questo nome. Dipende davvero dal motore. –

0
SELECT * FROM SysColumns WHERE Name like 'a%' 

otterrà un elenco di colonne, si vuole filtrare di più per limitare a vostra tabella di destinazione

Da lì è possibile costruire un po 'di SQL ad-hoc

+0

thanks.It sarebbe bello se alcuni db possano trattare le colonne in modo simmetrico come file, come un foglio speead in Excel ... –

4

è necessario utilizzare vista INFORMATION_SCHEMA.COLUMNS

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

inline le righe che è possibile utilizzare PIVOT e per l'esecuzione la funzione EXEC().

41

questo modo si ottiene la lista

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

Se si desidera utilizzare che per costruire una query, si potrebbe fare qualcosa di simile:

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 

Si noti che quanto sopra è scritto per SQL Server.

+1

Grazie Blorgbeard, mi piace come hai incluso anche una query per utilizzare le colonne effettive in modo dinamico. Sono in una situazione in cui le colonne crescono sul tavolo fuori dal mio controllo, quindi questo funziona perfettamente per me. Votato! – Ryan

+0

È fantastico! Utilizzerò sicuramente questo. – CSharper

1

Ecco un bel modo per visualizzare le informazioni che si desidera:

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 

aggiungere qualcosa tra una '%%' nel selezionare principale per limitare ciò che le tabelle e/o nomi di colonna che si desidera.

2

Questo ti mostrerà il nome della tabella e il nome della colonna

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

Blorgbeard ha avuto una grande risposta per il server SQL. Se hai un server MySQL come il mio, quanto segue ti permetterà di selezionare le informazioni da colonne in cui il nome è come una frase chiave. Devi solo sostituire il nome della tabella, il nome del database e la parola chiave.

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; 
Problemi correlati