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%
?
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%
?
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.
'select * from information_schema.columns' :) – Blorgbeard
.. que es sql estándar, es lo que quise decir. – Blorgbeard
@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. –
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
gracias. Sería bueno si algunos db pueden tratar columnas de forma simétrica como filas, como una hoja de referencia en excel ... –
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.
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
¡Esto es tan asombroso! Definitivamente va a usar esto. – CSharper
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.
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%'
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;
¿Está tratando de buscar una lista de nombres de columnas y pregunta esas columnas? –
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
@Matthew, gracias por su comentario. Voy a hacer una pregunta de novato relacionada. –