Manejo de fechas en sqlserverCE

En ocasiones el manejo de fechas se puede convertir en un dolor de cabeza, tanto como cuando queremos hacer operaciones entre ellas, como cuando queremos imprimirlas en un formato especifico. Es por esto que el día de hoy quería compartirles ciertos ejemplos con el uso de fechas en nuestras aplicaciones.

Bueno lo primero que hay que saber es que sqlserver maneja muchos formatos de fecha, y para estos ejemplos utilizaremos el formato “HH:mm:ss yyyy-MM-dd” Cuando hablemos de horas y “yyyy-MM-dd” cuando hablemos de fecha.

Nota: Cundo en el formato de Hora ponemos la HH indica que la hora se maneja en formato de 24 horas y la ponemos en hh el formato sera de am y pm.

El primer ejemplo que vamos a utilizar sera en el caso de que utilicemos un control dateTimePicker

null

Estos controles son nativos del framework y es el que yo utilizo comúnmente para mis aplicaciones móviles, tanto para insertar fechas como para insertar horas.

Estos controles permiten desplegar el dato a ingresar de diferentes formas. El primero seria haciendo clic en la pestañita para que se despliegue un calendario para seleccionar en él la fecha como vemos en la imagen.

null

En la imagen anterior vemos que el formato de fecha es diferente a la primera y esto es porque quería mostrarles que en estos controles el formato para ser visualizada la fecha puede ponerse al gusto que uno quiera. Ahora la pregunta es…. como cambiamos ese formato???

La respuesta es muy simple, estos controles tiene una propiedad llamada Format, la cual tiene estas opciones  (Cada una con su respectiva representación:

Long  —> jueves, 17 de diciembre de 2009

 short— >  17/12/2009

 time —>  01:15:00 p.m

 custom. —> Formato que queramos.

Cundo elijamos la opción custom queremos decir que nosotros indicaremos el formato, para esto en la propiedad CustomFormat ingresamos el formato que nosotros queramos, por ejemplo HH:mm:ss —> 13:15:00.

Cuando queremos mostrar en este control una hora, como en la primera imagen, podemos cambiar la presentación del control agregándole dos pestañas una para aumentar la hora y otra para disminuirla. Para ponerle las dos pestañas de aumento y disminución lo hacemos por medio de la propiedad ShowUpDown seleccionándola en TRUE.

Bueno solo queda por decir cómo hacemos para guardar este valor en la base de datos. Yo personalmente lo hago de dos formas, esto no quiere decir que sea la única, pero es la que mas se ajusta a mis necesidades.

Cuando quiero insertar simplemente una fecha sin importarme la hora, lo que hago es darle por código el formato que necesito: dateTimePicker.Value.ToString(“yyyy-MM-dd”);

Si lo que quiero es guardar una fecha teniendo en cuanta la hora seleccionada, o en su defecto una hora seleccionada utilizo este formato: dateTimePicker.Value.ToString(“HH:mm:ss yyyy-MM-dd”);

 

Después de tener almacenadas las fechas en nuestra base de datos vamos a querer trabajar con ellas, he aquí unos ejemplos del uso que he tenido que hacer con datos tipo fechas almacenados en una base de datos sqlserver CE.

1. Obtener la información de la tabla y desplegarla sobre un control datetimepicker.

Para esto lo que hacemos es un select común y corriente y cuando tengamos la fila (Row) con el valor que queramos desplegar sobre el control lo hacemos de la siguiente manera:

dateTimePicker.Value = (DateTime)row[“<Nombre campo>”];

El formato en el que se visualice la información dependerá exclusivamente del formato que tenga el control datetimepicker.

2. Obtener simplemente la fecha o simplemente la hora de un valor almacenado en la base de datos.

En ocasiones necesitamos hacer una consulta para mostrar en pantalla la fecha en un determinado formato,  si la fecha la mostráramos en un dateTimePicker pues no tendríamos problemas puesto que el control es el que llevaría el formato. Pero si queremos es imprimirlo en un textbox o concatenarlo con alguna otra cosa, ya tendremos que meterle mano a la consulta para obtener la fecha en el formato que queramos.

Para hacer ese casteo utilizamos la función CONVERT ej:

SELECT  CONVERT(NVARCHAR, <campo>, <tipoFormato>) FROM <TABLA>

A continuación listo algunos de los tipos de formatos más utilizados:

0 mes dd aaaa hh:mi a.m o pm
1 mm/dd/aaaa
2 aa.mm.dd
3 dd/mm/aaaa
4 dd.mm.aa
5 dd-mm-aa
6 dd mes aa
7 mes dd, aa
8 hh:mi:ss
9 mes dd aaaa hh:mi:ss:mmmm a.m o pm

 

Por ejemplo si tengo un campo con un valor tipo fecha y necesito es obtener simplemente la hora, la consulta sería la siguiente:

SELECT  CONVERT(NVARCHAR, fecha, 3) FROM Persona

Suponiendo que el valor del campo es 2009-12-17 1:15:00 pm el resultado para esta consulta seria 13:15:00.

3. Hacer la resta de dos fechas en una consulta SQL

En ocasiones necesitamos realizar consultas que dependen de la resta entre dos fechas, para esto tenemos la función DATEDIFF

Syntax
DATEDIFF ( datepart , startdate , enddate )

Año yy
Cuarto q
Mes m
Dia D
Semana wk
Hora hh
Minuto mi
Segundos s
Milisegundos Ms

 
Devuelve
integer
 

Supongamos que necesitamos mostrar los registros de una tabla donde la diferencia de minutos sea < 20. Para esto realizamos  una consulta de la siguiente manera:

SELECT * FROM PERSONA WHERE DATEDIFF ( mi ,  fecha, getdate() ) < 20

Un comentario en “Manejo de fechas en sqlserverCE

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s