Sentencias en MySQL Que Tal Ves No Conocias

Sentencias en MySQL Que Tal Ves No Conocias mysql 100x52 64Hace unos dias en el trabajo ayude a frogx3 a hacer unos reportes que incluian varias operaciones que si bien las podia hacer con un poco mas de programación en PHP recorde que en el MySQL Query Browser viene una lista de funciones separadas por tipos que nos pueden ser de mucha utilidad y que muchas veces ni siquiera sabemos que existen, bien pues me dispuse a revisar las funciones que me presentaba dicha lista y me encontre con que mySQL nos puede ahorrar lineas de código si sabemos utilizarlo.

Algunas sentencias que me encontre son las siguientes:

Funciones para el control de flujo

Sentencia IF

Algo que nos puede ser util cuando trabajamos con banderas, se me ocurre por ejemplo cuando tenemos un campo llamado publicado donde 0=No publicado y 1= Publicado a nosotros nos interesara mostrar en pantalla un texto y no el valor (0,1) de la bandera bien podriamos hacer una consulta como la siguiente:

[code lang="sql"]

SELECT IF(t.publicado=1,'Si','No') as publicado FROM tabla t;

[/code]

CASE

Creo que todos los que hemos programado sabemos para que es un case por lo que obviare la explicación.

Sintaxis:

CASE [valor] WHEN [condicion] THEN resultado [WHEN [condicion] THEN resultado…] [ELSE resultado] END

Ejemplo de Uso:

[code lang="sql"]

SELECT CASE WHEN 1>0 THEN 'mayor' ELSE 'menor' END;
[/code]

Nos imprimiría en pantalla “mayor”

Otro ejemplo:

[code lang="sql"]

SELECT CASE 1 WHEN 1 THEN 'uno' WHEN 2 THEN 'dos' ELSE 'otro' END;

[/code]

Nos imprimiría en pantalla “uno”

Operaciones Con Cadenas

CHAR()
Interpreta cada argumento N como un entero y devuelve una cadena que consiste en lo valores en ascii de dichos enteros. Los valores nulos no son tomados en cuenta.

Sintaxis: CHAR(N,…)

Ejemplo:

[code lang="sql"]

SELECT CHAR(77,121,83,81,'76');

[/code]

Imprime en pantalla “MySQL”

CONCAT

Te devuelve la cadena resultante de concatenar los argumentos pasados en la función. Puede tener mas de un argumento.

Sintaxis: CONCAT(cadena1,cadena2,…)

Ejemplo de uso:

[code lang="sql"]

SELECT CONCAT('My', 'S', 'QL');

[/code]

Imprime: MySQL

[code lang="sql"]

SELECT u.usuario, CONCAT(u.ciudad,', ',u.estado,', ',u.pais) as localizacion FROM usuarios u;

[/code]

Mostrará en pantalla un listado de los usuarios junto con un campo localización que es el resultado de concatenar ciudad, estado y pais.

REPLACE

Sintaxis: REPLACE(cadena,cadena_buscada,valor_para_reemplazar)

Devuelve una cadena con todas las ocurrencias de ‘cadena_buscada’ reemplazadas por ‘valor_para_reemplazar’

Ejemplo:

[code lang="sql"]

SELECT REPLACE('www.mysql.com', 'w', 'Ww');

[/code]

Imprime: ‘WwWwWw.mysql.com’

TRIM

Una función que seguramente la mayoria de nosotros hemos utilizado en php o su equivalencia en algun otro lenguaje, MySQL tambien nos la proporciona y yo para ser sincero ni lo sabia.

Sintaxis: TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str)

Devuelve la cadena str con todos los prefijos o sufijos remstr eliminados. Si ninguno de los parametros BOTH, LEADING, or TRAILING es proporcionado,
se asume el parámetro BOTH. remstr es opcional y, si ninguno es especificado, todos los espacios en blanco son removidos.

Ejemplo:

[code lang="sql"]

SELECT TRIM(' cadena ');

[/code]

Imprime: cadena

[code lang="sql"]

SELECT TRIM(LEADING 'a' FROM 'aaavaloraaa');
[/code]

Imprime: valoraaa

[code lang="sql"]

SELECT TRIM(BOTH 'a' FROM 'aaavaloraaa');

[/code]

Imprime: valor

[code lang="sql"]

SELECT TRIM(TRAILING 'xyz' FROM 'cadenaxxyz');
[/code]

Imprime: cadena

REPEAT

Sintaxis: REPEAT(str,n)

Devuelve una cadena que consiste en la cadena str repetida n veces. Si n es menor que 1, devuelve una cadena vacia. Devuelve NULL si str o n son NULL

Ejemplo:

[code lang="sql"]

SELECT REPEAT('MySQL', 3);

[/code]

Imprime MySQLMySQLMySQL

Operaciones con Fechas

Muchas veces tenemos una fecha y deseamos calcular una fecha sumando o restandole cierto número de dias para esto tenemos una sentencia de MySQL que nos permite hacer eso.

DATE_ADD y DATE_SUB

Sintaxis: DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)

Estas funciones ejecutan funciones aritmeticas sobre la fecha. date es un valor DATETIME o DATE especificando la fecha de inicio. expr es una expresion especificando el valor del intervalo a ser sumado o restado de la fecha de inicio. expr es una cadena; puede comenzar con un signo ‘-’ para los intervalos negativos. unit es una palabra clave indicando la unidad en la cual la expresion debe ser interpretada.

Los siguientes son los valores que puede tener el parametro expr unit.

unit Valor Formato para expr
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES.MICROSECONDS'
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_MICROSECOND 'HOURS.MICROSECONDS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DAY_MICROSECOND 'DAYS.MICROSECONDS'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'

Ejemplos:

[code lang="sql"]

SELECT '1997-12-31 23:59:59' + INTERVAL 1 SECOND;
#IMPRIME '1998-01-01 00:00:00'
SELECT INTERVAL 1 DAY + '1997-12-31';
#IMPRIME '1998-01-01'
SELECT '1998-01-01' - INTERVAL 1 SECOND;
#IMPRIME '1997-12-31 23:59:59'
SELECT DATE_ADD('1997-12-31 23:59:59',INTERVAL 1 SECOND);
#IMPRIME '1998-01-01 00:00:00'
SELECT DATE_ADD('1997-12-31 23:59:59',INTERVAL 1 DAY);
#IMPRIME '1998-01-01 23:59:59'
SELECT DATE_ADD('1997-12-31 23:59:59',INTERVAL '1:1' MINUTE_SECOND);
#IMPRIME '1998-01-01 00:01:00'
SELECT DATE_SUB('1998-01-01 00:00:00',INTERVAL '1 1:1:1' DAY_SECOND);
#IMPRIME '1997-12-30 22:58:59'
SELECT DATE_ADD('1998-01-01 00:00:00',INTERVAL '-1 10' DAY_HOUR);
#IMPRIME '1997-12-30 14:00:00'
SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
#IMPRIME '1997-12-02'
SELECT DATE_ADD('1992-12-31 23:59:59.000002',INTERVAL '1.999999' SECOND_MICROSECOND);
#IMPRIME '1993-01-01 00:00:01.000001'

[/code]

Estas son algunas de las funciones que me parecieron que pudieran servirnos mas a menudo y que nos evitarian un poco de lineas de código en nuestra programación, espero les sirvan de algo.

Actualización:

Eduard Capell nos menciona en los comentarios de 2 sentencias igual muy útiles estas son:

INSERT IGNORE

Sintaxis: INSERT IGNORE INTO tabla (campo1,campo2) VALUES (valor1,valor)

Intenta insertar, pero ignora los posibles errores que se puedan producir, por ejemplo, como consecuencia de alguna PRIMARY KEY duplicada.
Ejemplo:
INSERT IGNORE into tabla(id) VALUES (3);

Si el valor 3 correspondia al campo de la clave primaria y dicho valor ya existía en la tabla, no se producirá un error (como es el caso del INSERT “normal”), sino que sencillamente se insertarán 0 filas y no devolverá ningún error.

INSERT … ON DUPLICATE KEY UPDATE

Si especificamos ON DUPLICATE KEY UPDATE en nuestra consulta, y una fila es insertada que puede causar duplicidad con alguna llave primaria o indice unico en nuestra tabla, se realiza una actualización al registro.

Ejemplo:

[code lang="sql"]

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

#Seria lo mismo que hacer una consulta update como la siguiente

UPDATE table SET c=c+1 WHERE a=1;

[/code]

Agradezco a Eduard por su aporte e invito a los demas lectores a poner su granito de arena.

Saludos.

  • http://www.ilovescarlett.blogspot.com scarlett
    cuando entro a este tipo de blogs, digo ORALE!!, ignoro un buen de cosas.
  • Pingback: www.programame.net

  • www.programame.net
    Muy interesante, la verdad es que da gusto ver este tipo de info de vez en cuando.
  • Pingback: AplicacionesWeb » Archivos del Blog » Sentencias en MySQL Que Tal Ves No Conocias

  • Pingback: Emilio-Jose Rodríguez García » Sentencias SQL desconocidas

  • http://eduardcapell.com/blog eduard capell
    Una sentencia interesante: INSERT IGNORE. Intenta insertar, pero ignora los posibles errores que se puedan producir, por ejemplo, como consecuencia de alguna PRIMARY KEY duplicada.
    Ejemplo:
    INSERT IGNORE into tabla(id) VALUES (3);

    Si el valor 3 correspondia al campo de la clave primaria y dicho valor ya existía en la tabla, no se producirá un error (como es el caso del INSERT “normal”), sino que sencillamente se insertarán 0 filas y no devolverá ningún error.

    Otro caso similar es el de INSERT … ON DUPLICATE KEY UPDATE, que podéis consultar en la documentación: http://dev.mysql.com/doc/refman/5.0/en/insert.html

    Un saludo,
    Eduard

  • http://www.webadictos.com.mx dmedina
    Gracias por el aporte Eduard, lo voy a anexar al post. Saludos
  • Pingback: www.teknear.com

  • Pingback: WebAdictos - Una dosis diaria de web@ » Archivo del Blog » Tips Para Optimizar Consultas MySQL En PHP

  • Pingback: Actualidad, Entretenimiento y Humor » Tips Para Optimizar Consultas MySQL En PHP

  • http://www.disperu.com Neozeratul
    Bueno ya tengo varios dias q encontre este sitio y leo y leo y sigo leyendo con una desmesura q me agobio de tantas cosas q no sabia y ahora las pondre en practica de verdad que felicito a todos uds x los aportes son buenazos, yo un humilde principienate de programacion PHP jijijijiji bueno que mas por decir a seguir aprendiendo por siempre
  • Omar Chavez
    Excelente aporte… yo conocia esas instrucciones, algunos de los ejemplos ya los aplico, pero otras cosas me ayudaron a hilar la aplicacion de esa seria de instrucciones que conosco, pero como información suelta… no me habia puesto a profundizar en como aplicarlas…. con este aporte, ya veo que hay muchas cosas que se pueden hacer con esas instrucciones raras que volaban en mi mente.

    Excelente… gracias… ahora si aplicare eso que se, y no sabia para que servía!! ejejje

  • http://www.webadictos.com.mx dmedina
    Gracias Omar de eso se trata de compartir que bueno que te hayas aclarado algunas cosas y lo mejor es que puedas aplicarlo en las cosas que haces.

    Saludos

  • Pingback: Ya no hay excusa: tutoriales y utilidades para programar en cualquier lenguaje » Innova Desarrollos informáticos

  • Pingback: Sistemas de Almacenamiento de MySQL

  • kazador_2
    mira tengo un porblema no se como trabajar con la letra ñ en el mysql puesto que si tengo un apellido tipo nuñez no lee la ñ y si la lee pues sale nunez quisiera saber como trabajar con la ñ porfa thanks
  • Pingback: 20 Tips de Diseño MySQL

  • http://lamoree morenita
    Estoy trabajando con sentencias desconocidas, y me han puesto una lista que no encuentro para que sirven entre ellas estan; BY, and, like, exists, some. any, having, all. por favor el que me pueda ayudar con esta class mi correo es morenita1818 e hotmail. thans anticipas
  • http://www.vuelometro.com/ vuelos low cost
    Muy completo el post, muchas gracias me ha servido de ayuda. habia visto en un tutorial lo del case when pero al parecer estaba erroneo ponia “end case” al final
    parte de mi codigo:
    CASE TIPO WHEN ‘ vuelos low cost
    ELSE ‘ofertas de billetes’
    END CASE.
    el end case del final estaba mal, gracias.
  • anibal
    hola ai alguien que me pueda ayudar con mi travajo
  • anibal
    3- HOTEL
    Se quiere implementar una aplicación que maneje una base de datos para mantener información de la disponibilidad de habitaciones en un hotel. Al los directivos del hotel les interesa además mantener registro de todos los clientes que se hospedan en el hotel. Por cada cliente interesa mantener: tipo y número de documento, nombre, fecha de nacimiento y lugar de procedencia. Cada habitación tiene asociado un número que la identifica (piso y número de habitación). Las habitaciones se clasifican en 3 tipos (simple, doble, matrimonial). Para poder mantener registro de la disponibilidad es necesario, además, mantener información sobre las reservas hechas: fecha de inicio y cantidad de días de permanencia. De las habitaciones ocupadas registrar la fecha de entrada, fecha de salida, monto a abonar y el tipo de pago.

    OPCIONES O PARTES DEL PROGRAMA

    El sistema debe permitir a través de un menú realizar las transacciones de carga, borrado, actualización, y las siguientes consultas:

    1) Recuperar el nombre, apellido, dirección y edad de todos los clientes registrados.
    2) Mostrar los clientes que ocuparon alguna habitación dentro de un rango de fecha, ingresado por teclado.
    3) Mostrar los clientes que realizaron reservas en el día.
    4) Exportar en un archivo Excel los datos referentes a una habitación.

    no entiendo mas me rompe la cavesa ayudenme

  • http://hagamosciencia.wordpress.com Lalo
    Exelente post me yudo vastante