2011-03-11 18 views
19

Tengo una tabla con los nombres de columna a1,a2...,b1.b2....sql seleccionar con nombre de columna como

¿Cómo puedo seleccionar todos aquellos con nombres de columna como a%?

+0

¿Está tratando de buscar una lista de nombres de columnas y pregunta esas columnas? –

+0

Aunque es posible, le recomiendo que no lo haga. Su pregunta implica una de dos cosas: 1) Que no desea declarar explícitamente todas sus columnas (lo cual debería hacer) o 2) Que no conoce el esquema de la tabla que está consultando. Si no conoce el esquema de la tabla, no tendrá una dimensionalidad consistente del conjunto de datos devuelto ... – Matthew

+0

@Matthew, gracias por su comentario. Voy a hacer una pregunta de novato relacionada. –

Respuesta

0

No se puede con SQL estándar. Los nombres de columna no se tratan como datos en SQL.

Si utiliza un motor SQL que tiene, por ejemplo, tablas de metadatos que almacenan nombres de columnas, tipos, etc., puede seleccionar en esa tabla.

+8

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

+0

.. que es sql estándar, es lo que quise decir. – Blorgbeard

+1

@Blorgbeard, está correcto information_schema es SQL estándar. Sin embargo, no todos los motores lo implementan, y no todos usan este nombre. Realmente depende del motor. –

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

le conseguirá una lista de columnas, tendrá que filtrar más restringirlo a su tabla de destino

Desde allí se puede construir algún SQL ad-hoc

+0

gracias. Sería bueno si algunos db pueden tratar columnas de forma simétrica como filas, como una hoja de referencia en excel ... –

4

Es necesario utilizar Ver INFORMATION_SCHEMA.COLUMNS

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

a inline filas que se pueden utilizar para PIVOT y ejecución de la función EXEC().

41

Esto le dará la lista

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

Si desea utilizar eso para construir una consulta, se puede hacer algo como esto:

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 

Tenga en cuenta que lo anterior está escrito para SQL Servidor.

+1

Gracias Blorgbeard, me gusta cómo también incluyó una consulta para usar dinámicamente las columnas reales. Estoy en una situación en la que las columnas crecen sobre la mesa fuera de mi control, así que esto funciona perfectamente para mí. Votado! – Ryan

+0

¡Esto es tan asombroso! Definitivamente va a usar esto. – CSharper

1

Aquí es una buena manera de mostrar la información que desea:

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 

añadir nada entre cualquiera '%%' en el principal seleccione para reducir lo que las tablas y/o nombres de columna que desee.

2

Esto le mostrará el nombre de la tabla y el nombre de la columna

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

Blorgbeard tuvo una gran respuesta para el servidor SQL. Si tiene un servidor MySQL como el mío, lo siguiente le permitirá seleccionar la información de las columnas donde el nombre es como una frase clave. Solo tiene que sustituir el nombre de la tabla, el nombre de la base de datos y la palabra clave.

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; 
Cuestiones relacionadas