Hay veces que pese a recibir un parámetro en formato fecha que almacene dia y hora, nos interese únicamente almacenar (o recuperar) la parte correspondiente a la fecha.
Aquellos que hayan realizado alguna vez comparaciones de fechas situadas en un intervalo probablemente sepan de qué hablo: ¿Comparar entre un día a las 00:00:00 y el siguiente a las 00:00:00? ¿Entre el mismo día entre las 00:00:00 y las 23:59:59?
Una forma simple de ahorrarnos dolores de cabeza sería almacenar la fecha sin hora. Para ello haremos uso de los distintos formatos de fecha que nos permite promocionar SQL Server y escribiríamos algo así:
UPDATE NombreTabla SET CampoFecha = convert(datetime, convert(varchar(10), CampoFecha, 103))
Con lo cual, almacenaremos nuestra fecha en formato DD:MM:AAAA 00:00:00.
Te falto algo, el codigo bueno es asi.
UPDATE NombreTabla SET CampoFecha = convert(datetime, convert(varchar(10), CampoFecha , 103), 103)
Ambos códigos son igualmente funcionales. Se trata de un casting de un casting, en el que se convierte una fecha en una cadena con formato dd-mm-aaaa para posteriormente volver a convertir la fecha.
Con especificar el formato una única vez es suficiente, pero el código que tu indicas también tendría el mismo efecto.
En cualquier caso, gracias por el apunte 🙂
como se hace para almacenar en un campo de una tabla sólo la hora sin la fecha? en un sql server 2005.
Gracias!
eri
Hola, Erica.
Puedes intentar crear en tu tabla un campo NVARCHAR(8) (si únicamente quieres guardar hh:mm:ss) y guardar la hora de la siguiente manera:
INSERT INTO MiTabla(MiCampoNVarchar) VALUES (CAST(DATEPART(hh, GETDATE()) AS NVARCHAR(2)) + ‘:’ + CAST(DATEPART(mi, GETDATE()) AS NVARCHAR(2)) + ‘:’ + CAST(DATEPART(s, GETDATE()) AS NVARCHAR(2)));
Del mismo modo, puedes almacenar la fecha completa y recuperar únicamente la hora de una forma similar:
select CAST(DATEPART(hh, MiCampoDateTime) AS NVARCHAR(2)) + ‘:’ + CAST(DATEPART(mi, MiCampoDateTime) as NVARCHAR(2)) + ‘:’ + CAST(DATEPART(s, MiCampoDateTime) AS NVARCHAR(2)) from MiTabla as Hora
Espero que te sirva. Un saludo 😉
Esta opción no me funcionó, me daba error de conversión.
Recomiendo mejor utilizar esta otra conversión para quitar la hora a una fecha:
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
Fuente: http://www.guillesql.es/Articulos/SQLServerFAQ_Como_Fechas.aspx
no seria asi? convert(datetime, convert(varchar(10), CampoFecha, 103),103)
muchas gracias me sirvió mucho
Con 103, no me funciono pero con 101, si, creo que depende de la configuracion del SQL server
Select convert(datetime, convert(varchar(10), getdate(), 101))
Si utilizo 103, me marca:
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.