Conversión de string a fecha

15/03/2007 - 13:36 por David | Informe spam
Saludos a todos


Estoy haciendo una select contra un mysql, e intento hacer un order by fecha
desc

lo que pasa es que el campo es string y por supuesto la ordenación no es
correcta.

Necesito poder convertir en la select el campo string a fecha, lo he
intentado con Cdate pero no lo acepta el mysql.

Alguien puede darme algun ejemplo de una select similar??

Muchas Gracias

David

Preguntas similare

Leer las respuestas

#6 David
16/03/2007 - 16:54 | Informe spam
buenas Tardes Miguel , el error que da es el siguiente

You have an error in your SQL syntax. Check the manual that corresponds to
your MySQL server version for the right syntax to use near '(fecha, '%d/%m/%Y
%H:%i:%s') DESC' at line 1


En realidad el formato es con barras y : y lo acabo de probar tal cual y
sigue dándome el error

La versión del server de Mysql es 4.15 creo

Un saludo Y Muchas Gracias

David
"Miguel Gonzalez" wrote:

Hola David.

¿Qué error da?

Tal como expones en el formato, los datos del campos se guardan así:

"16-03-2007 13.31.09"

¿Es correcto?

Presta atención a los ceros antes de los números menores a 10... Marzo
se escribe "03", por ejemplo, y el año tiene que tener cuatro dígitos.
La hora va de 00 a 24, y los minutos y segundos de 00 a 59.


Saludos!

Miguel

David escribió:
> Buenos Dias Miguel, realmente cuando se montó la tabla, no entiendo porque se
> hizo string y no datetime, pero ahora cambiarlo implicaria cambiar mucho
> código en diversos programas. De todas formas, no se mueven muchos registros.
>
> Acabo de relaizar la select directamente sobre un mysql browser y no acaba
> de funcionar pues me da error en los parámetros del STR_TO_DATE
> la query es la siguiente:
>
> SELECT * FROM tabla ORDER BY STR_TO_DATE(fecha, '%d-%m-%Y %H.%i.%s') DESC
>
> el campo string consta de la fecha y la hora
>
> Muchas Gracias
>
> David
> "Miguel Gonzalez" wrote:
>
>> Hola David.
>>
>> Justamente la consulta sería tal como dices:
>>
>> SELECT fecha FROM tabla ORDER BY STR_TO_DATE(fecha, "formato") DESC
>>
>> El punto que hay que cuidar es la parte de formato de la función. Si el
>> contenido del campo no se corresponde con el formato especificado no
>> funcionará.
>>
>> Una recomendación: Si el campo que almacena la fecha es de tipo
>> "string", ¿no has sopesado la posibilidad de cambiar su tipo de datos a
>> "date"? Este tipo es mucho más eficiente que el "string" a la hora de
>> trabajar con fechas: se ahorra espacio; tiene una mejor "performance"; y
>> permite realizar muchos cálculos típicos con fechas sin necesidad de
>> hacer conversiones previas (imagina que tienes un millón de registros y
>> que tienes que convertir el campo "string" a "fecha" para poder realizar
>> un cálculo... tendrías que realizar ¡un millón de veces! la conversión
>> en cada consulta...
>>
>> Saludos!
>>
>> Miguel
>>
>> David escribió:
>>> Si la he mirado pero mi problema es que el string en cuestion es un campo de
>>> la tabla y esto lo he de hacer en la select
>>>
>>> "select * from tabla order by STR_TO_DATE(fecha,"formato") desc"
>>>
>>> seria asi???
>>>
>>> Muchas gracias
>>>
>>> David
>>> "Miguel Gonzalez" wrote:
>>>
>>>> Hola David.
>>>>
>>>> MySql soporta multitud de funciones. Creo que la que tú necesitas es:
>>>>
>>>> STR_TO_DATE(str,format)
>>>>
>>>> Donde "str" corresponde al texto (string) que contiene la fecha y
>>>> "format" indica el formato que contiene.
>>>>
>>>> Por ejemplo, convierte a fecha la cadena "15/03/2007":
>>>>
>>>> STR_TO_DATE("15/03/2007","%d/%m/%Y")
>>>>
>>>> Mírate la referencia de la función y las especificaciones de formato en:
>>>>
>>>> http://dev.mysql.com/doc/refman/5.0...tions.html
>>>>
>>>>
>>>> Saludos!
>>>>
>>>> Miguel
>>>>
>>>>
>>>> David escribió:
>>>>> Saludos a todos
>>>>>
>>>>>
>>>>> Estoy haciendo una select contra un mysql, e intento hacer un order by fecha
>>>>> desc
>>>>>
>>>>> lo que pasa es que el campo es string y por supuesto la ordenación no es
>>>>> correcta.
>>>>>
>>>>> Necesito poder convertir en la select el campo string a fecha, lo he
>>>>> intentado con Cdate pero no lo acepta el mysql.
>>>>>
>>>>> Alguien puede darme algun ejemplo de una select similar??
>>>>>
>>>>> Muchas Gracias
>>>>>
>>>>> David

Respuesta Responder a este mensaje
#7 Piolinnet
16/03/2007 - 17:49 | Informe spam
Mirate la funcion CAST de sql

salu2

"David" escribió en el mensaje
news:
Saludos a todos


Estoy haciendo una select contra un mysql, e intento hacer un order by
fecha
desc

lo que pasa es que el campo es string y por supuesto la ordenación no es
correcta.

Necesito poder convertir en la select el campo string a fecha, lo he
intentado con Cdate pero no lo acepta el mysql.

Alguien puede darme algun ejemplo de una select similar??

Muchas Gracias

David
Respuesta Responder a este mensaje
#8 Miguel Gonzalez
17/03/2007 - 12:46 | Informe spam
Hola David!

¡Uf! Lo siento de veras... :-(

Se me olvidó indicarte el "detalle" de que la función "funciona" a
partir de MySQL 5.

He estado mirando la referencia y tu problema no tiene fácil solución
(¿quizás podrías actualizar la versión de MySQL?).

La función DATE(fecha), soportada por tu versión de MySQL, obtiene
también una fecha a partir de un "string", pero requiere que la fecha
esté almacenada en formato canónico: "YEAR/MONTH/DAY", con lo que creo
que no te servirá.

Una alternativa sería "armar" el "string" de la fecha, si siempre se
guardara de la misma forma y convertir el "string" resultante a fecha.

Por ejemplo, si las fechas siempre tienen dos dígitos para el dia, dos
dígitos para el mes y cuatro dígitos para el año ("13/03/2007"):

DATE(CONCAT(SUBSTRING(fecha,7,4),"-",SUBSTRING(fecha,4,2),"-",SUBSTRING(fecha,1,2)))

Aunque requiere, repito, que las fechas se guarden siempre de la misma
forma.

Saludos!
Miguel


David escribió:
buenas Tardes Miguel , el error que da es el siguiente

You have an error in your SQL syntax. Check the manual that corresponds to
your MySQL server version for the right syntax to use near '(fecha, '%d/%m/%Y
%H:%i:%s') DESC' at line 1


En realidad el formato es con barras y : y lo acabo de probar tal cual y
sigue dándome el error

La versión del server de Mysql es 4.15 creo

Un saludo Y Muchas Gracias

David
"Miguel Gonzalez" wrote:

Hola David.

¿Qué error da?

Tal como expones en el formato, los datos del campos se guardan así:

"16-03-2007 13.31.09"

¿Es correcto?

Presta atención a los ceros antes de los números menores a 10... Marzo
se escribe "03", por ejemplo, y el año tiene que tener cuatro dígitos.
La hora va de 00 a 24, y los minutos y segundos de 00 a 59.


Saludos!

Miguel

David escribió:
Buenos Dias Miguel, realmente cuando se montó la tabla, no entiendo porque se
hizo string y no datetime, pero ahora cambiarlo implicaria cambiar mucho
código en diversos programas. De todas formas, no se mueven muchos registros.

Acabo de relaizar la select directamente sobre un mysql browser y no acaba
de funcionar pues me da error en los parámetros del STR_TO_DATE
la query es la siguiente:

SELECT * FROM tabla ORDER BY STR_TO_DATE(fecha, '%d-%m-%Y %H.%i.%s') DESC

el campo string consta de la fecha y la hora

Muchas Gracias

David
"Miguel Gonzalez" wrote:

Hola David.

Justamente la consulta sería tal como dices:

SELECT fecha FROM tabla ORDER BY STR_TO_DATE(fecha, "formato") DESC

El punto que hay que cuidar es la parte de formato de la función. Si el
contenido del campo no se corresponde con el formato especificado no
funcionará.

Una recomendación: Si el campo que almacena la fecha es de tipo
"string", ¿no has sopesado la posibilidad de cambiar su tipo de datos a
"date"? Este tipo es mucho más eficiente que el "string" a la hora de
trabajar con fechas: se ahorra espacio; tiene una mejor "performance"; y
permite realizar muchos cálculos típicos con fechas sin necesidad de
hacer conversiones previas (imagina que tienes un millón de registros y
que tienes que convertir el campo "string" a "fecha" para poder realizar
un cálculo... tendrías que realizar ¡un millón de veces! la conversión
en cada consulta...

Saludos!

Miguel

David escribió:
Si la he mirado pero mi problema es que el string en cuestion es un campo de
la tabla y esto lo he de hacer en la select

"select * from tabla order by STR_TO_DATE(fecha,"formato") desc"

seria asi???

Muchas gracias

David
"Miguel Gonzalez" wrote:

Hola David.

MySql soporta multitud de funciones. Creo que la que tú necesitas es:

STR_TO_DATE(str,format)

Donde "str" corresponde al texto (string) que contiene la fecha y
"format" indica el formato que contiene.

Por ejemplo, convierte a fecha la cadena "15/03/2007":

STR_TO_DATE("15/03/2007","%d/%m/%Y")

Mírate la referencia de la función y las especificaciones de formato en:

http://dev.mysql.com/doc/refman/5.0...tions.html


Saludos!

Miguel


David escribió:
Saludos a todos


Estoy haciendo una select contra un mysql, e intento hacer un order by fecha
desc

lo que pasa es que el campo es string y por supuesto la ordenación no es
correcta.

Necesito poder convertir en la select el campo string a fecha, lo he
intentado con Cdate pero no lo acepta el mysql.

Alguien puede darme algun ejemplo de una select similar??

Muchas Gracias

David
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida