Herramientas de usuario

Herramientas del sitio


informatica:bases_de_datos:mysql:snippets

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:bases_de_datos:mysql:snippets [2024/07/09 11:36] – [Conversiones] tempwininformatica:bases_de_datos:mysql:snippets [2024/09/16 10:33] (actual) – [Búsqueda de valores duplicados] tempwin
Línea 1: Línea 1:
 ====== Snippets MySQL ====== ====== Snippets MySQL ======
  
 +Colección de consultas u operaciones útiles o interesantes de [[informatica:bases_de_datos:mysql|MySQL]].
 ===== Filtrar con expresiones regulares ===== ===== Filtrar con expresiones regulares =====
  
Línea 19: Línea 20:
 </code> </code>
  
 +===== Agrupar =====
 +
 +==== Agrupar por un valor y concatenar los demás en una columna ====
 +
 +Por ejemplo, si tenemos:
 +
 +^ servicio_web  ^ email      ^
 +| 11111         | mail@mail.com   |
 +| 22222         | mail@mail.com   |
 +| 33333         | mail@mail.com   |
 +| 44444         | mail@mail.com   |
 +
 +Y queremos obtener el siguiente resultado:
 +
 +^ email         ^ servicio_web      ^
 +| mail@mail.com  | 11111, 22222, 33333, 44444  |
 +
 +Usaremos la función [[https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_group-concat|GROUP_CONCAT]]:
 +
 +<code mysql>
 +SELECT   
 +    email, 
 +    GROUP_CONCAT(servicio_web ORDER BY servicio_web ASC SEPARATOR ', '
 +FROM mitabla
 +GROUP BY email
 +</code>
 +
 +==== Búsqueda de valores duplicados ====
 +
 +Si queremos ver qué valores están duplicados en cierto campo, podemos hacer la siguiente consulta:
 +
 +<code mysql>
 +SELECT 
 +    campo1, 
 +    COUNT(*) c 
 +FROM mitabla 
 +GROUP BY campo1
 +HAVING c > 1
 +</code>
 +
 +Nos devolverá los valores de ''campo1'' que se repiten (de 1 a más veces)
 +
 +  * [[https://stackoverflow.com/questions/688549/finding-duplicate-values-in-mysql|Finding duplicate values in MySQL]] (Stack Overflow)
 ===== Fechas ===== ===== Fechas =====
  
Línea 76: Línea 120:
   * ''%e'': número del día del mes sin cero inicial (del 1 al 31)   * ''%e'': número del día del mes sin cero inicial (del 1 al 31)
   * ''%Y'': número del año   * ''%Y'': número del año
-  * ''%h'': hora sin cero inicial (de 1 a 12)+  * ''%l'': hora sin cero inicial (de 1 a 12)
   * ''%i'': minutos (de 00 a 59)   * ''%i'': minutos (de 00 a 59)
   * ''%s'': segundos (de 00 a 59)   * ''%s'': segundos (de 00 a 59)
Línea 229: Línea 273:
 El cambio durará hasta que finalice la sesión. El cambio durará hasta que finalice la sesión.
 </WRAP> </WRAP>
- 
  
 Si queremos ver el valor actual de esa variable: Si queremos ver el valor actual de esa variable:
Línea 257: Línea 300:
 UPDATE test SET log = REPLACE(REPLACE(log, '\r', ''), '\n', ''); UPDATE test SET log = REPLACE(REPLACE(log, '\r', ''), '\n', '');
 </code> </code>
 +
 +==== Concatenar campos que pueden ser NULL ====
 +
 +Si usamos la función ''CONCAT'' y algún campo puede tener valor NULL, la función devolverá NULL. Si este no es el comportamiento que queremos, debemos usar ''CONCAT_WS'' cuyo primer argumento es el separador:
 +
 +<code sql>
 +SELECT CONCAT_WS(" ", campo1, campo2, campo3_que_puede_tener_null, campo4)
 +FROM tabla
 +</code>
 +
 +<WRAP center round info 60%>
 +CONCAT_WS viene de //Concatenate With Separator//.
 +</WRAP>
 +
 +  * [[https://es.stackoverflow.com/questions/86721/usar-concat-o-concat-ws-en-mysql|¿Usar CONCAT o CONCAT_WS en MySQL?]]
 ===== Sistema ===== ===== Sistema =====
  
Línea 313: Línea 371:
 En las próximas inserciones, la columna con AUTO_INCREMENT se rellenará desde 1001 y siguientes. En las próximas inserciones, la columna con AUTO_INCREMENT se rellenará desde 1001 y siguientes.
  
 +==== Insertar varios registros a la vez ====
 +
 +<code mysql>
 +INSERT INTO nombre_tabla
 +    (a,b,c)
 +VALUES
 +    (1,2,3),
 +    (4,5,6),
 +    (7,8,9);
 +</code>
 ===== Tablas ===== ===== Tablas =====
  
Línea 360: Línea 428:
 DROP TABLE IF EXISTS <TABLA1>, <TABLA2>, <TABLA3> DROP TABLE IF EXISTS <TABLA1>, <TABLA2>, <TABLA3>
 </code> </code>
 +
 +==== Obtener nombre columnas ====
 +
 +Para ver el listado de campos de una tabla y su tipo:
 +
 +<code mysql>
 +DESCRIBE <NOMBRE_TABLA>
 +</code>
 +
 +Si queremos obtener el listado de campos separados por coma:
 +
 +<code mysql>
 +-- Aumentamos la longitud máxima de 'group_concat' (por defecto, 1024 caracteres)
 +-- Esto solo se mantiene durante la sesión
 +SET SESSION group_concat_max_len = 1000000;
 +
 +SELECT group_concat(COLUMN_NAME)
 +FROM INFORMATION_SCHEMA.COLUMNS
 +WHERE TABLE_SCHEMA = '<BASE_DATOS>'
 +  AND TABLE_NAME = '<NOMBRE_TABLA>';
 +</code>
 +
 +  * [[https://stackoverflow.com/a/1526722|Get table column names in MySQL?]]
 ===== Administración ===== ===== Administración =====
  
informatica/bases_de_datos/mysql/snippets.1720517764.txt.gz · Última modificación: por tempwin