2011-03-11 18 views
19

Mam tabelę z nazwami kolumn a1,a2...,b1.b2....sql wybierz z nazwą kolumny, taką jak

Jak mogę wybrać wszystkie z nazwami kolumn, takimi jak a%?

+0

Próbujesz wyszukać listę nazw kolumn, a następnie zapytać te kolumny? –

+0

Choć jest to możliwe, zdecydowanie odradzam robienie tego. Twoje pytanie oznacza jedną z dwóch rzeczy: 1) Nie chcesz jawnie zadeklarować wszystkich kolumn (które powinieneś) lub 2) Nie znasz schematu tabeli, której dotyczy zapytanie. Jeśli nie znasz schematu tabeli, nie będziesz miał spójnej wymiarowości zwracanego zestawu danych ... – Matthew

+0

@Matthew, dzięki za komentarz. Zadam pytanie związane z nowicjuszem. –

Odpowiedz

0

Nie można za pomocą standardowego kodu SQL. Nazwy kolumn nie są traktowane jak dane w SQL.

Jeśli używasz silnika SQL, który ma, na przykład, tabele metadanych przechowujące nazwy kolumn, typy itp., Możesz wybrać tę tabelę.

+8

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

+0

.. co jest standardowym sql, jest to, co miałem zamiar powiedzieć. – Blorgbeard

+1

@Blorgbeard, masz poprawną informację_schema jest standardowym SQL. Jednak nie wszystkie silniki go implementują i nie wszystkie używają tej nazwy. Naprawdę zależy od silnika. –

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

będzie Ci listę kolumn, będziemy chcieli, aby filtrować bardziej ograniczyć je do tabeli docelowej

Stamtąd można skonstruować niektóre SQL ad-hoc

+0

dziękuję. Byłoby miło, gdyby jakiś db mógł traktować kolumny w sposób symetryczny jak wiersze, jak arkusz speead w programie Excel ... –

4

trzeba użyć zobacz INFORMATION_SCHEMA.COLUMNS

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

dO inline wierszy można użyć PIVOT i wykonanie EXEC() funkcji.

41

To będzie Ci listę

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

Jeśli chcesz używać, aby skonstruować kwerendę, można zrobić coś takiego:

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 

pamiętać, że powyższe jest napisane dla SQL Serwer.

+1

Dzięki Blorgbeard, podoba mi się to, że dodałeś zapytanie, aby dynamicznie używać rzeczywistych kolumn. Jestem w sytuacji, w której kolumny rosną na stole poza moją kontrolą, więc to działa idealnie dla mnie. Zagłosowałem! – Ryan

+0

To jest niesamowite! Z pewnością będzie z tego korzystał. – CSharper

1

Oto dobry sposób, aby wyświetlić informacje, które chcesz:

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 

niczego pomiędzy albo „%%” w głównym wybierz, aby zawęzić jakie tabele i/lub nazwy kolumn chcesz.

2

To pokaże nazwę tabeli i nazwę kolumny

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

Blorgbeard świetnie się odpowiedź na serwerze SQL. Jeśli masz serwer MySQL taki jak mój, to poniższe opcje pozwolą Ci wybrać informacje z kolumn, w których nazwa jest jak niektóre kluczowe frazy. Trzeba tylko zastąpić nazwę tabeli, nazwę bazy danych i słowo kluczowe.

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; 
Powiązane problemy