2011-03-04 7 views
5

¿Se podría hacer la vida más fácil al guardar los valores de DateTime como long? Siempre parece haber problemas cuando se trabaja con valores nulos de DateTime, ya sea que almacene o recupere: DateTimes nulo, DateTimes no válidos, etc., siempre son difíciles de trabajar.¿Debo almacenar DateTimes como Long (Ticks) en una base de datos?

¿Sería aconsejable simplemente trabajar con un tipo de datos long ya que siempre puede crear un DateTime a partir de los ticks?

Editar: Trabajo con SqlServer y MySql. SqlDateTime es una derivación .net de DateTime. Existen diferencias entre las 3 plataformas de lo que es válido DateTime. ¿Cómo manejas estas diferencias?

+2

datetime está ahí por una razón: úselo. –

+0

DateTime está ahí para su conveniencia, IMO. Simplemente estoy considerando guardar los valores de DateTime como ticks en una base de datos. Recuperar un largo de la base de datos me da lo que necesito para crear un DateTime a partir del número de tics. No veo un problema con eso. – IAbstract

+2

¿Cómo se resuelve alguno de los supuestos problemas con 'datetime' utilizando' long'? –

Respuesta

7

Supongo que se debe a las preferencias personales. Siempre trabajo con tipos de fecha y hora y no me molestan.

Si los almacena como largos semánticamente ya no son fechas. Si alguna vez quisiste hacer una consulta para seleccionar todas las cuentas agregadas en un viernes (por ejemplo), tendrías que pasar por varios aros para resolverlo.

+5

Burning aros de muerte y destrucción. – Max

4

No puedo pensar en ninguna razón sobresaliente personalmente, las bases de datos son compatibles con DateTime, y almacenarlas por mucho tiempo puede terminar disparándose en el pie. Supongamos que debe poder ejecutar una consulta "Obtener todas las filas entre las 3 AM y las 6 PM". Si las almacena como ticks, deberá volver a convertirlas en DateTime en la base de datos.

Almacenamiento de ellos como garrapatas puede impedir muchas otras operaciones, como la agrupación, clasificación, filtrado, etc.

Si tiene matices con DateTime en la base de datos, como la zona horaria, es muy recomendable para normalizar la DateTime a una zona horaria específica, como UTC. Muchos de los problemas que enfrentan los equipos con DateTime en la base de datos a menudo se deben a insumos antihigiénicos, como no normalizar TimeZone. Almacenarlo como ticks seguirá teniendo el mismo problema.

+0

excelente punto de las consultas: 1 – IAbstract

2

No, utilice una columna datetime.

No siempre parecen haber problemas cuando se trabaja con nula DateTime valores

Si su columna es anulable, y que por alguna razón tienen dificultades cuando el tipo de la columna es datetime también tendrá problemas cuando el tipo de la columna es long.

... DateTime no válidos

¿Cómo se obtiene datetimes no válidos en una columna datetime? Uno de los propósitos del uso de la columna datetime es que ese tipo de validación ocurre antes de que se permita insertar los datos. Es mucho más probable que obtenga fechas de vencimiento no válidas al usar un long desnudo.

Finalmente, usar un long significa que ver su base de datos a través de un simple SQL (select * from table) producirá resultados ilegibles.

+0

parece que hay diferencias entre lo que SqlServer, MySql, y .Net consideran como valores DateTime no válidos ... – IAbstract

+0

@IAbstract, de hecho - siempre es útil ser específico en su pregunta . ¿Estás preguntando sobre una base de datos en particular? –

+0

En el momento en que recibí esta pregunta, estaba extrayendo datos de SQL Server y MySQL. No recuerdo todos los detalles, pero DateTime estaba en juego desde las 3 plataformas (.Net incl.) Por lo tanto, almacenar el DateTime como un tiempo sería "universal". Creo que tuve la autoridad y el acceso para modificar solo una de las bases de datos que me hubiera hecho la vida más fácil en el lado .Net de las cosas (como intermediario). De lo contrario, no me preocupaba la legibilidad de los valores largos en una columna * DateTime * ya que podía, si era necesario, usar una función de fecha/proc para mostrar la fecha de acuerdo con la plataforma respectiva. – IAbstract

2

En algunos casos, sí. Sql almacena las fechas con una precisión menor que DateTime.Esto significa que un valor persistido y recuperado puede tener un valor DateTime ligeramente diferente del objeto original, lo que puede causar algunos problemas con el pedido o la comparación.

Cuestiones relacionadas