¿Es posible obtener el tipo de campo de una consulta MySQL , de la misma manera que puede obtenerlo de una tabla con el SHOW COLUMNS
comando? Tal como de una tabla derivada,
SELECT x -- presumedMetaFn(x) -- returns "int"
FROM (
SELECT 1 AS x
UNION SELECT 2
) AS t;
Dada la consulta anterior, ¿hay una función o algo que pueda usar para obtener el tipo de x? PostgreSQL lo pone a disposición con las funciones de información del sistemapg_typeof
SELECT x, pg_typeof(x)
FROM ( VALUES (1),(2) ) AS t(x);
x | pg_typeof
---+-----------
1 | integer
2 | integer
(2 rows)
No estoy buscando metadatos en una tabla, sino del resultado de la consulta. Con psql
PostgreSQL 11+, esto también es posible al ejecutar \gdesc
después de la consulta.
Respuestas:
Dentro de MySQL, puede obtener esta información creando una tabla temporal y luego utilizando
DESCRIBE
esa tabla temporal:No podemos simplemente usar
DESCRIBE
en la tabla original porque la columna de la que queremos saber el tipo es una columna calculada, no algo que se extraiga directamente de una tabla. Del mismo modo, no podemos usarDESCRIBE
directamente en la consulta, porqueDESCRIBE
solo se puede usar en tablas. Crear una tabla temporal resuelve ambos problemas.fuente
No hay una forma comparable de entregar una consulta a MySQL y pedirle que devuelva un conjunto de resultados que contenga los nombres y atributos de las columnas que su consulta devolverá cuando se ejecute.
Sin embargo, la biblioteca que está utilizando para acceder a MySQL probablemente tenga un mecanismo que su código podría usar ... porque en el cable, MySQL devuelve esta información a los clientes con cada consulta ejecutada.
A modo de ejemplo, la biblioteca DBD :: mysql en Perl devuelve matrices de nombres de columnas y tipos de datos.
Un controlador de instrucción ejecutado devuelve una matriz de los nombres de columna en @ {$ sth -> {NAME}} y una matriz de los tipos de datos de columna en @ {$ sth -> {mysql_type_name}}. Obtiene estos de las funciones proporcionadas por la API MySQL C, que (que yo sepa) es el mismo código subyacente utilizado por muchos idiomas diferentes para sus bibliotecas MySQL ... por lo que esperaría que estructuras similares se expongan en otros ambientes.
fuente
Creo que esta información está disponible a través de C API y está documentada en Códigos de tipo de declaración preparada de C API, pero que el servidor no tiene la capacidad de proporcionarla al usuario final,
Para ver una tabla de los tipos de SQL y el
buffer_type
valor correspondiente , consulte este gráfico.La única solución es
CREATE TEMPORARY TABLE AS SELECT (CTAS) ... DESCRIBE
fuente
La pregunta, según lo leí, es acerca de obtener detalles sobre las columnas en un conjunto de resultados, a diferencia de las columnas de las tablas de la base de datos.
Si está utilizando PHP, hay funciones integradas para acceder a bases de datos con MYSQLI y PDO que pueden brindarle información detallada (tipo de datos, etc.) sobre las columnas en un resultado de consulta (en oposición a las columnas de las tablas originales) .
Para obtener detalles sobre estos métodos, consulte la documentación de PHP:
fuente