Report inadequate content

Exportar una consulta de Mysql en un fichero CSV

{
}

Si tienes una tabla o consulta que quieres exportar a CSV tienes dos maneras muy fáciles de hacerlo. La primera es dentro de la consola mysql utilizando después del SELECT la opción INTO OUTFILE. Esto escribirá en el fichero externo que indiques el contenido de la consulta. La segunda opción es desde la propia línea de comandos utilizando la opción "Batch".

Diferencias entre método 1 y 2: El primero permite especificar la terminación de las líneas en el csv así como si quieres comillas en cada campo. El segundo escribe en el CSV los campos delimitados por tabulación sin más. La segunda es la opción más senclla y rápida para la mayoría de casos.

Opción 1: Exportar una consulta SQL a CSV desde la consola Mysql

Si por ejemplo quieres que cada campo de tu consulta se separe con punto y coma y cada registro por un salto de línea windows (\r\n) o Unix (\n), lo que vendría a ser un CSV vaya!, solo tienes que hacer algo como:

SELECT
        *
FROM
        tu_tabla
WHERE
        condicion
-- Aqui viene la exportación
INTO OUTFILE
        '/tmp/fichero_salida.csv'
        FIELDS TERMINATED BY ';'
        OPTIONALLY ENCLOSED BY '\"'
        LINES TERMINATED BY '\r\n';

Puedes cambiar el formato fácilmente cambiando los caracteres. En este caso el fichero final estaría en la carpeta /tmp, un lugar fácil para evitar problemas de permisos

Opción 2: Exportar una consulta SQL a CSV desde terminal

Este método es todavía más simple, pero asume que quieres los campos separados por tabulación, cosa que si vas a usar un Excel o similar quizá sea lo más práctico y rápido.

Para ello basta con pasar dos parámetros básicos:

  • -e: Indicando la consulta que quieres hacer entre comillas
  • -B: para indicar que quieres recibir la consulta en modo "batch" (campos separados por tabs)

Supongamos que nos conectamos a mysql, con el contenido de la primera línea...

mysql -u root --password=elquesea mibasededatos \
-e "SELECT * FROM tabla where ...." -B > fichero_salida.csv

... en la segunda tienes la parte que hace la exportación. Ahora tendrás en el fichero_salida.csv el resultado de la consulta delimitado por tabulaciones y si hay cualquier error lo verás por pantalla.

{
}
{
}

Comments Exportar una consulta de Mysql en un fichero CSV

Con esto puedo abrir los resultados de una consulta mysql en Excel. Gracias!
[...]de> Fuente: http://dev.mysql.com/doc/refman/5.0/en/ http://www.harecoded.com/exportar-consulta-mysql-fichero-csv-945014[...]
Buenas! es un poco tarde para entrar a comentar peroo xD ¿me podrias decir como exportar desde consola añadiendo los delimitadores? es decir que cada columna este delimitada con ;.
Un saludo
zw zw 23/03/2012 at 10:59
Supongo que lo que quieres decir es una mezcla de los dos. Sería hacer la segunda opción sin el -B y dentro del parámetro -e poner toda la parte de "INTO OUTFILE..."
o_O! gracias por constetar tan rapido, siendote sincero no tenia muchas esperanzas xD.
Estoy trabajando remotamente y el problema que tengo es que si quito la parte del "> nombreFichero" en la ruta de OUTFILE no me aparece el fichero. Supongo que lo guarda en el servidor pero no es lo que quiero. Si ejecuto lo siguiente.
mysql -h IP -u USUARIO --password=USUARIO BASEDEDATOS -e "SELECT name FROM TABLA INTO OUTFILE 'C:\ruta' FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n'";  > fichero.csv me crea el fichero pero vacio.
Gracias de antemano.
zw zw 23/03/2012 at 12:57
Estás mezclando dos salidas a terminal.
La sentencia OUTFILE lo que hace es decir en qué ruta del servidor quieres guardar el fichero y a cambio no muestra ningún tipo de salida por la terminal (porque ya está en el fichero). Lo siguiente que pones el "> fichero" lo que hace es redirigir la salida de la terminal a un fichero, pero como que la salida está vacía entonces tienes también un fichero vacío.
Con lo que estás haciendo, en tu servidor, deberías tener el fichero C:\ruta con los datos (supongo que es un windows) si tiene acceso de escritura. Sólo allí tienes el fichero.
Si lo quieres en el cliente entonces te aconsejaría que utilices la opción del -B sin el OUTFILE, ya que este tipo de ficheros pueden importarse igualmente en cualquier tipo de hoja de cálculo.
Siempre puedes también cambiar los tabuladores por punto y coma con cualquier script sencillo de una línea.
Saludos
Aunque el post ya es antiguo, como referencia para nuevos visitantes, lo siguiente:
Excel solo reconoce como separador la ',', no el ';', por lo que la sentencia que señala el chico en su comentario debería quedar así
mysql -h IP -u USUARIO --password=USUARIO BASEDEDATOS -e "SELECT name FROM TABLA INTO OUTFILE 'C:\ruta\fichero.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n'"
Ernesto Blanco Ernesto Blanco 08/04/2013 at 10:10
hola como hago para que esta consulta me genere el csv delimitado por comas?,
me lo genera pero solo tabulado
('mysql -h 172.18.52.217 -u infovista --password=infovista inventory_enrich_infovista -e "SELECT equipo,interfaz,id_camino,bw_transporte*1000*1000,equipo_origen,equipo_destino,agrupacion1 FROM inv_dslam_huawei_ip;" > reporte.csv')
saludos,
gracias
daniel daniel 11/04/2013 at 16:40
Cómo puedo grabar el archivo con un nombre variable? Por ejemplo, deseo exportar una consulta basada en un folio por ejemplo el 5 y necesito que el archivo se guarde como 5.txt
LG LG 25/05/2014 at 16:36
eres un monstruo, funciona perfecto, yo lo ejecute en windows desde phpmyadmin y el archivo final de salida queda guardado en la carpeta "data" de la instalación de mysql
john john 14/07/2014 at 23:50
Corrijo, no es en la carpeta de instalacion, sino en la carpeta oculta Program Data de Windows
john john 14/07/2014 at 23:59
Muchas gracias por compartir, me funcionó de maravilla, todo sencillo como debe ser, saludos!
Mauro F Mauro F 27/02/2015 at 18:24
Muy buen articulo yo encontre este que lo hace desde php. lo que no se es como hacer que me escriba desde una segunda tabla.
// output headers so that the file is downloaded rather than displayed
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');
// output the column headings
fputcsv($output, array('Column 1', 'Column 2', 'Column 3'));
// fetch the data
mysql_connect('localhost', 'username', 'password');
mysql_select_db('database');
$rows = mysql_query('SELECT field1,field2,field3 FROM table');
// loop over the rows, outputting them
while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row);
alex alex 26/03/2015 at 19:54
Alex una pregunta, sabes como pararlo a sql??
Romansinho Romansinho 08/02/2016 at 01:23
Buenas tardes,
Una consulta, esta opcion esta sólo disponible para MySql o tambien se puede utilizar en SQL Server 2012?
Desde ya, muchas gracias por toda la información que me pudas proveer.
Jaime Jaime 02/03/2016 at 15:39
Como pudiera obtener el archivo de en ves con tabulaciones con , muchas gracias saludos se que es un poco atrasado pero gracias
Dariel Dariel 11/09/2017 at 20:13

Leave your comment Exportar una consulta de Mysql en un fichero CSV

Log in to Obolog, or create your free blog if you are not registered yet.

User avatar Your name