Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Procedimiento mysql de fecha a texto

Estas en el tema de Procedimiento mysql de fecha a texto en el foro de Mysql en Foros del Web. Hola ,necesito crear un procedimiento en el cual si se pone una fecha la devuelva con un texto.Por ejemplo para 2014-11-20 devuelva 20 de noviembre ...
  #1 (permalink)  
Antiguo 25/11/2014, 14:58
 
Fecha de Ingreso: febrero-2013
Ubicación: denia
Mensajes: 13
Antigüedad: 11 años, 9 meses
Puntos: 0
Procedimiento mysql de fecha a texto

Hola ,necesito crear un procedimiento en el cual si se pone una fecha la devuelva con un texto.Por ejemplo para 2014-11-20 devuelva 20 de noviembre de 2014.
Código SQL:
Ver original
  1. delimiter$$
  2. CREATE PROCEDURE fechas(fecha)
  3. BEGIN
  4. /*Aqui no se qué variables declarar
  5. ni qué consulta poner*/
  6. END;$$
  7. CALL fechas(2014-11-20)

Estoy bastante verde en el tema pero he buscado por google y no he podido encontrar ningún ejemplo.
Gracias por la ayuda.
creo que con date_format() lo podré solucionar si no me equivoco

Última edición por gnzsoloyo; 25/11/2014 a las 16:31
  #2 (permalink)  
Antiguo 25/11/2014, 16:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimiento mysql de fecha a texto

No existe una consulta en mySQL que te pueda devolver la fecha en castellano. Eso es algo que debes crear, y en todo caso, da igual que lo hagas en la base o que lo logres por programación en la aplciación.
En los hechos, no tiene sentido que lo hagas con stored procedures, cuando lo puedes resolver en cualquier lenguaje de programación...

¿Es un ejercicio de clase o realmente lo necesitas hacer?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 26/11/2014, 11:18
 
Fecha de Ingreso: febrero-2013
Ubicación: denia
Mensajes: 13
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Procedimiento mysql de fecha a texto

Es un ejercicio del instituto a distancia que no consigo realizar.Es de procedimientos en mysql.Lo realizo desde el workbench conectado al servidor mysql creado en una instancia ubuntu de Amazon.Con un procedimiento y mediante estructuras condicionales debo dar salida de texto cuando se da una fecha.
gracias por contestar.
  #4 (permalink)  
Antiguo 26/11/2014, 11:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimiento mysql de fecha a texto

Pues lo que debes hacer es crear la logica del SP que descomponga la fecha en los elementos necesarios, y con ellos crear la cadena de texto que se te pide.
¿Eso te queda claro?

En ese contexto, cuando nos posteas esto:
Código MySQL:
Ver original
  1. delimiter$$
  2. CREATE PROCEDURE fechas(fecha)
  3. /*Aqui no se qué variables declarar
  4. ni qué consulta poner*/
  5. END;$$

nos estás pidiendo que escribamos la solucion por tí, ya que no estás ni siquiera intentando escribir parte del código (la declaracion del SP no cuenta como parte del ejercicio). Y eso no lo hacemos por nadie.

Si quieres que te ayudemos, empeiza por proponernos un código que muestre que has intentado realizarlo, y a partir de tu propio código iremos guiándote.
Pero NO regalamos soluciones ni hacemos trabajos prácticos a nadie.

Lo que te puedo decir es que lo puedes solucionar muy fácilmente con el uso del controlador de flujo CASE... END CASE, que puedes ver en el manual de referencia: http://dev.mysql.com/doc/refman/5.0/en/case.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/11/2014, 09:02
 
Fecha de Ingreso: febrero-2013
Ubicación: denia
Mensajes: 13
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Procedimiento mysql de fecha a texto

Mi intención no era que me hicieran los deberes porque eso al único que le perjudica es mi.Solo quería ,como bien has hecho y te agradezco,un empujón para poder avanzar.Gracias de nuevo!
  #6 (permalink)  
Antiguo 27/11/2014, 10:46
 
Fecha de Ingreso: febrero-2013
Ubicación: denia
Mensajes: 13
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Procedimiento mysql de fecha a texto

Al final lo solucioné con este código,ahí lo dejo para algún novatillo como yo que le pueda ser útil,gracias.
Código SQL:
Ver original
  1. USE mysql
  2. delimiter $$
  3. DROP PROCEDURE IF EXISTS fechas$$
  4. CREATE PROCEDURE fechas(campofecha DATE)
  5. NOT deterministic
  6. BEGIN
  7.  
  8. SELECT  concat(
  9. /*primer bloque para traducir el día*/
  10. CASE
  11. WHEN dayname(campofecha) = 'sunday' THEN "Domingo"
  12. WHEN dayname(campofecha) = 'monday' THEN "Lunes"
  13. WHEN dayname(campofecha) = 'tuesday' THEN "Martes"
  14. WHEN dayname(campofecha) = 'wednesday' THEN "Miércoles"
  15. WHEN dayname(campofecha) = 'thursday' THEN "Jueves"
  16. WHEN dayname(campofecha) = 'friday' THEN "Viernes"
  17. WHEN dayname(campofecha) = 'saturday' THEN "Sábado"
  18. /*fin del bloque*/
  19. END
  20. /*defino el número de día*/
  21. ,',',' ',DAY (campofecha),' de ',
  22.  
  23. CASE
  24.  /*segundo bloque que asigna un texto según el valor introducido */
  25. WHEN MONTH(campofecha) = 1 THEN "enero"
  26. WHEN MONTH(campofecha) = 2 THEN "febrero"
  27. WHEN MONTH(campofecha) = 3 THEN "marzo"
  28. WHEN MONTH(campofecha) = 4 THEN "abril"
  29. WHEN MONTH(campofecha) = 5 THEN "mayo"
  30. WHEN MONTH(campofecha) = 6 THEN "junio"
  31. WHEN MONTH(campofecha) = 7 THEN "julio"
  32. WHEN MONTH(campofecha) = 8 THEN  "agosto"
  33. WHEN MONTH(campofecha) = 9 THEN "septiembre"
  34. WHEN MONTH(campofecha) = 10 THEN "octubre"
  35. WHEN MONTH(campofecha) = 11 THEN "noviembre"
  36. WHEN MONTH(campofecha) = 12 THEN "diciembre"
  37. /*en caso contrario*/
  38. ELSE
  39. "no es un mes"
  40. /*fin del segundo bloque case end..*/
  41. END
  42. /*año y valor de columna fecha_texto*/
  43. ,' de ', YEAR(campofecha)) AS fecha_texto;
  44. /*fin del procedimiento*/
  45. END;$$
  46. /*ejemplo llamda al procedimiento*/
  47.  CALL fechas('2014-11-27')

Última edición por bhyktorio6; 27/11/2014 a las 10:51
  #7 (permalink)  
Antiguo 27/11/2014, 11:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimiento mysql de fecha a texto

bastante bien logrado para ser el primer intento...
Ahora bien hay algunas cosas que debes tner en cuenta:
1) No conviene usar comillas (") para las cadenas de texto, porque no todas las instalaciones de MySQL te lo tomarán bien. Normalmente y por default las comillas se usan como delimitadores de nombres de objetos de base de datos y no para cadenas. Es más seguro usar apóstrofos ('), que siempre son para cadenas.
2) NUNCA uses la base "mysql" para pruebas. Esa base es propia de la adminsitracion de MySQL, y no deben crearse tablas, procedimietnos ni ningun objeto en ella. Sólo la usa internamente el MySQL para si mismo.
3) No tiene sentido buscar la condición de ELSE para decir que algo no es un mes. Siendo el parámetro de entrada un DATE, si no es una fecha de formato válido se dispara un error de MySQL de tipo de dato incorrecto y el procedimiento no se ejecuta. Así de sencillo.
4) Trata de no complicar la lógica. Lee con cuidado los tipos de funciones que existen y que son muy variados en MySQL. Las hasy mejores y más simples para hacer lo que quieres.

Yo probaría esto, a ver si funciona bien:

Código MySQL:
Ver original
  1. DROP DATABASE IF EXISTS baseprueba;
  2.  
  3. CREATE DATABASE IF EXISTS baseprueba;
  4.  
  5. USE baseprueba;
  6.  
  7. delimiter $$
  8. CREATE PROCEDURE fechas(IN campofecha DATE)
  9.     DECLARE NombreDia VARCHAR(50);
  10.     DECLARE nombreMes VARCHAR(50);
  11.  
  12.     SET NombreDia = ELT(DAYOFWEEK(campofecha), 'Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sabado');
  13.     SET nombreMes = ELT(MONTH(campofecha), 'Enero',  'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre');
  14.     SELECT CONCAT(NombreDia, ' ', DAY(campofecha), ' de ', nombreMes, ' de ', YEAR(campofecha));    
  15. END;$$
  16.  
  17. CALL fechas('2014-11-27');


DAYOFWEEK(): http://dev.mysql.com/doc/refman/5.6/...tion_dayofweek

ELT(): http://dev.mysql.com/doc/refman/5.6/...l#function_elt
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 27/11/2014, 11:53
 
Fecha de Ingreso: febrero-2013
Ubicación: denia
Mensajes: 13
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Procedimiento mysql de fecha a texto

Perfecto,el mismo resultado con menos trabajo.Te faltó poner el 'NOT' cuando creas la base de datos para obtener el resultado.
Gracias.
  #9 (permalink)  
Antiguo 27/11/2014, 12:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimiento mysql de fecha a texto

Cita:
Te faltó poner el 'NOT' cuando creas la base de datos para obtener el resultado.


Si, es cierto. Error mío...



__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:14.