Específicamente hablando, solo necesito horas: minutos, pero digo que tengo un objeto .NET TimeSpan, ¿cómo debo almacenar eso en una base de datos SQL (CE)?¿Cuál es la mejor manera de representar un intervalo de tiempo en SQL Server CE?
Respuesta
Yo recomendaría utilizar un largo para representar el número de ticks. Eso es lo que usa TimeSpan ya que es una representación interna. Esto le permite reconstituir fácilmente su objeto con el método Timespan.FromTicks(), y enviarlo a la base de datos usando el Timespan.Ticks property. La unidad de tiempo más pequeña en .NET es la marca, que es igual a 100 nanosegundos
SQL CE no tiene un tipo de hora, o tipos definidos por el usuario, por lo que sus opciones son datetime o int que representan los minutos. Si el tiempo más grande que necesita almacenar es 23:59 = 23 * 60 + 59 = 1439 = el número de minutos en un día comenzando desde el minuto 0, una pequeña letra es el tipo integral más pequeño que acomodará ese rango.
Resista la tentación de almacenar horas y minutos en columnas separadas como tinyints. Eso usaría el mismo espacio como una pequeña miniatura, pero luego cada cálculo de tiempos requerirá multiplicar horas por 60 y agregar minutos, y cada order by
requerirá dos columnas en lugar de una.
Almacenar en minutos; en la pantalla, se puede separar en las horas y minutos minutos con
select floor(absminutes/60) as hours, absminutes % 60 as minutes,
from some table
order by absminutes;
que nombraría la columna (s) minutes
o absminutes
(para los minutos absolutos) si se quiere distinguir los minutos en 1439 de un día de los 0-59 minutos en una hora.
convertir del valor de base de datos a un objeto Timespan, utilice el ctor Timespan(int, int, int)
como este new TimeSpan(floor(absminutes/60), absminutes % 60, 0)
o (mejor) la ctor Timespan(long)
con new Timespan(absminutes * TimeSpan.TicksPerMinute)
.
Para insertar o actualizar la base de datos de un objeto Timespan, establezca absminutes en someTimespan.TotalMinutes % 1440
.
Almacenar como varchar. Guardar en sql usando TimeSpan.ToString()
. Leer desde SQL como:
TimeSpanObj = TimeSpan.Parse(fieldValue)
¿Por qué se ha bajado este valor? Es una sugerencia legítima, y si tiene que editar los datos SQL directamente, es mucho más fácil escribir "2 minutos" como ''00: 02'' en lugar de' 1200000000' –
actualmente estoy considerando usar Tiempo SQL para manejar esto, pero no va a funcionar para> = 24 horas.
Las ventajas incluyen lectura fácil, fácil de usar tanto en SQL como en código, pero la caída es que solo tiene un pequeño intervalo de tiempo para jugar.
declare @delay table (DelayTime Time(3))
insert into @delay values ('00:10:00.000')
select getdate() as nowtime, getdate()+DelayTime as nowPlusTen from @delay
y
SqlDataReader dr = cmd.ExecuteReader();
DelayTime = (TimeSpan) dr["DelayTime"];
- 1. ¿cuál es la mejor manera de representar latice hexagonal
- 2. ¿cuál es la mejor manera de almacenar intervalo de tiempo en una base de datos del servidor SQL
- 3. ¿La mejor manera de representar un color en una base de datos SQL?
- 4. Inserción masiva en SQL Server CE
- 5. ¿encoger o compactar en Sql Server CE?
- 6. ¿Cuál es la mejor manera de copiar bases de datos completas en MS SQL Server?
- 7. ¿Cuál es la mejor manera de iniciar y detener SQL Server desde la línea de comandos?
- 8. ¿Cuál es la mejor manera de probar la conexión de SQL Server mediante programación?
- 9. ¿Cuál es la mejor manera de cifrar los SSN en SQL Server 2008?
- 10. ¿Cuál es la mejor manera de truncar una fecha en SQL Server?
- 11. ¿Cuál es la mejor manera de determinar si existe una tabla temporal en SQL Server?
- 12. La mejor manera de almacenar fechas antiguas en SQL Server
- 13. ¿Cuál es la mejor manera de guardar datos XML en SQL Server?
- 14. ¿Cuál es la mejor manera de almacenar datos históricos en SQL Server 2005/2008?
- 15. ¿Cuál es la mejor manera de trabajar con datos de SQL Server de forma no programática?
- 16. ¿Cuál es la mejor manera de enviar datos insertados desde SQL Server a una aplicación?
- 17. ¿Cuál es la mejor manera de representar una lista inmutable en .NET?
- 18. ¿Cuál es la mejor manera de implementar un "temporizador"?
- 19. ¿Cuál es la mejor manera de representar una relación muchos a muchos entre registros en una sola tabla SQL?
- 20. ¿Cuál es la diferencia entre Shrink y Compact en SQL Server CE?
- 21. ¿Cuál es la mejor manera de representar arbitrariamente números grandes en c?
- 22. ¿Cuál es la mejor manera de representar las prioridades/preferencias en los objetos?
- 23. En SQL Server, ¿cuál es la mejor manera de determinar si una cadena dada es un XML válido o no?
- 24. ¿Cuál es la mejor manera de representar las reglas de horario de verano?
- 25. ¿Cuál es la mejor manera de detener la ejecución de un proceso de Unicorn Server?
- 26. ¿Por qué SQL Server CE no es compatible con varchar?
- 27. Campos únicos de intervalo de fechas en SQL Server 2008
- 28. ¿La mejor manera de almacenar valores de intervalo de tiempo en MySQL?
- 29. ¿Cómo puedo actualizar mi Sql Server CE 3.5 sdf a Sql Server CE 4.0?
- 30. En SQL Server (2008), si quiero filtrar un campo de cadena que comienza con algo, ¿cuál es la mejor manera?
eso es exactamente lo que estoy haciendo en el proyecto que estoy trabajando. La capa ORM realiza la conversión como lo ha dicho, entre TimeSpan y ticks, ida y vuelta, sin margen de error. Además, una ventaja adicional es que tienes toda la precisión que probablemente necesites. Si te quedas con los minutos, tienes un problema real si el departamento de marketing dice "¿Qué tan difícil sería bajar la precisión a segundos?" –
Agradable, aunque ¿se garantiza una garrapata para tomar exactamente 100 nanosegundos? – SepehrM
La documentación de Framework no menciona ninguna sala de wiggle: https://msdn.microsoft.com/en-us/library/system.datetime.ticks(v=vs.110).aspx –