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%
?
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%
?
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ę.
'select * from information_schema.columns' :) – Blorgbeard
.. co jest standardowym sql, jest to, co miałem zamiar powiedzieć. – Blorgbeard
@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. –
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
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 ... –
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.
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
To jest niesamowite! Z pewnością będzie z tego korzystał. – CSharper
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.
To pokaże nazwę tabeli i nazwę kolumny
select table_name,column_name from information_schema.columns
where column_name like '%breakfast%'
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;
Próbujesz wyszukać listę nazw kolumn, a następnie zapytać te kolumny? –
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
@Matthew, dzięki za komentarz. Zadam pytanie związane z nowicjuszem. –