Páginas

martes, 14 de diciembre de 2010

Usos de la funcion DATE_FORMAT de MySQL

   Bueno como primera entrada de este Blog que fue creado para el aprendizade del Desarrollo Web, quiero comenzar con algo sencillo pero que ayuda bastante.

   Muchas veces al momento de mostrar fechas traidas de una consulta de base de datos nos encontramos con el formato americano (un probelma para algunos, ya que muchos deseamos que nos aparezca en formato de dia mes y año), cuando comence a trabajar con PHP sencillamente usaba la funcion explode separaba la fecha y la colocaba en el formato que deseaba (dd-mm-YYYY), una buena solución pero no la mas optima ya que MySQL nos permite traer las fechas en el formato que deseamos mediante su funcion DATE_FORMAT, con la que nos ahorramos todo el trabajo de separar y luego concatenar algo que acabamos de separar ( un poco enrredado no creen).

Para evitarnos eso utilizamos esta funcion, que solo nos pide dos parametros, el primero es la fecha en formato MySQL date/time (bien sea un campo o una cadena indicada en la consulta), el segundo es el formato en que se desea obtener la fecha de la consulta, dentro del formato que deseamos optener en el  manual nos indican cuales son los posibles formatos., son muy parecidos a los que se utiliza cuando trabajamos la funcion Date de php, todos antecedidos por el comodin de MySQL "%" bueno vamos a ver un pequeño ejemplo:

SELECT DATE_FORMAT(campo_fe,'%d/%m%Y') as "fecha formateada" FROM tabla;
el resultado seria:

--------------------------------------
|       fecha formateada            |
--------------------------------------
|         14/12/2010                   |
--------------------------------------

ahora bien, aveces algunos tenemos calendarios para selecionar fechas de un formulario, por ejemplo tenemos una pagina para busqueda en rango de fecha pero el formato que devuelve el calendario es mes/dia/año y no conocemos como configurar el calendario para obtener la fecha en el formato deseado (pasa mucho), que hacemos el explode y lo convertimos a fecha  en formato MySQL?? pues la funcion date_format tambien se puede utilizar en el condicional de la consulta por ejemplo
SELECT * FROM auditoria WHERE DATE_FORMAT(fecha,'%m/%d/%Y') BETWEEN '12/01/2010' AND '12/14/2010';
de esta manera tendriamos una auditoria entre ese rango de fechas.

igual si se desea buscar por ejemplo todos los  14 de Diciembre, sencillamente con indicarle al parametro de la funcion que busque solo ese dia y ese mes tendriamos nuestro resultado fijense:
SELECT * FROM tabla WHERE date_format(fecha,'%d-%m')='14-12';
tambien se puede al igual que con la funcion DAY(), MONTH() y YEAR() hacer una consulta diciendo solamente el dia,mes o año de la fecha que se desea buscar ejemplo:
SELECT * FROM tabla WHERE date_format(fecha, '%d')='14';
SELECT * FROM tabla WHERE date_format(fecha,'%m')='12';
SELECT * FROM tabla WHERE date_format(fecha,'%Y')='2010';
y que con las horas?? pues date format tambien te permite establecer el formato de horas en que deseas que se traiga tu consulta un ejemplo:
suponiendo que tenemos en un campo hora las 14:30:00 y deseamos que se muestre la hora con formato AM/PM sencillamente lo que debemos hacer es utilizar nuestra funcion
SELECT date_format(hora,'%h:%i:%s %p') FROM table;
el resultado seria

--------------------------------------
|       hora formateada            |
--------------------------------------
|         02:30:00 PM              |
--------------------------------------
bueno aca indique los usos que se le puede dar a esta funcion, que puede que paresca sencilla pero pero muy util al momento de trabajar con fechas en nuestros sistemas espero que sirva a alguien saludos

6 comentarios:

  1. buenos dias hermano, excelente tu tu ayuda, ahora una pregunta como insertar la fecha en la bd desde mi formulario si estoy utlizando una libreria calendario para traer la fecha y este me lo trae dia/mes/año???.... tengo ese problemita!!

    ResponderEliminar
    Respuestas
    1. Prueba con esto mi pana
      INSERT INTO nombre_tabla STR_TO_DATE(nombre_campo,'%d/%m/%Y')
      esto te da el formato que quieres guardar

      Eliminar
    2. Aunque lo más seguro es que el usuario haya encontrado respuesta, la respuesta que das es la mas optima ya que no hay movimiento en el servidor por parte de php sino que directamente se hace desde mysql, saludos

      Eliminar
  2. hasta donde tengo entendido e hice algunas pruebas el DATE_FORMAT es mas para obtener resultados de las consultas, que pasa cuando tienes un texto formateado?? sencillamente separa y dale formato para insertar, con php seria algo asi

    $campoFecha = '01/01/2011';
    $fecha = explode('/', $campoFecha);
    $fechaInsertar = $fecha[0] . '-' . $fecha[1] . '-' . $fecha[2];

    y si usas python es algo asì

    y la variable fechaInsertar la insertas en tu campo, dejame investigar un poco mas a ver si existe manera, saludos

    ResponderEliminar
  3. Hola:

    Como harías un procedimiento almacenado para realizar una búsqueda en mysql utilizando un parámetro por año?

    por ejemplo, digamos que tengo ya el procedimiento hecho, yo quiero hacer una busqueda por ID y por la fecha, pero, en lugar de poner toda la fecha, solo quisiera poner el año:

    call 'nombre procedimiento' (2008-45888,'2013')

    ResponderEliminar
    Respuestas
    1. pudieras hacer algo así

      delimiter //
      CREATE PROCEDURE procedimiento (IN cod INT)
      BEGIN
      SELECT * FROM tabla WHERE date_format(fecha, '%Y') = cod;
      END
      //

      solo puse el parámetro del que estabamos hablando, verifica y comentas a ver si te sirvio y si puedes lo dejas como ejemplo para algún futuro lector (con los datos de la tabla cambiada por supuesto), saludos

      Eliminar