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%
?
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%
?
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.
'select * from information_schema.columns' :) – Blorgbeard
.. che è sql standard, è ciò che intendevo dire. – Blorgbeard
@Blorgbeard, sei corretto information_schema è standard SQL. Tuttavia, non tutti i motori lo implementano, e non tutti usano questo nome. Dipende davvero dal motore. –
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
thanks.It sarebbe bello se alcuni db possano trattare le colonne in modo simmetrico come file, come un foglio speead in Excel ... –
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.
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
È fantastico! Utilizzerò sicuramente questo. – CSharper
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.
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%'
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;
si sta tentando di eseguire una query per un elenco di nomi di colonne e interrogare tali colonne? –
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
@Matthew, grazie per il tuo commento. Chiederò una domanda relativa ai principianti. –