Este fin de semana es muy largo ya que habrá un extra second insertado después de 23:59:59
el 30 de junio.Almacenamiento de un segundo intercalar en SQL Server 2008
Tenemos un sistema que registra una gran cantidad de datos durante todo el día y una de las reglas de negocios es que no se pueden registrar dos registros que se han producido al mismo tiempo, dentro de un segundo.
Estamos usando fechas UTC junto con el nuevo tipo de datos datetimeoffset
, pero por lo que yo sé, no le permitirán tener más de 60 segundos en un minuto.
Ciertamente, esto arroja un error:
select datediff(ss, getdate(), '30-jun-2012 23:59:60')
Pero de acuerdo con los dioses UTC Este será un tiempo real. Los eventos pueden tener lugar en 23:59:60
, pero no tenemos forma de registrar este hecho.
23:59:59
más una segunda compensación todavía se considerarán 00:00:00
el 1 de julio.
¿Cómo puedo registrar correctamente que ocurrió un evento en 23:59:60
en la base de datos?
Parece que las reglas de su negocio ignoran la realidad. –
¿Cómo es eso? Los eventos que se registran no pueden ocurrir físicamente más de una vez por segundo. Tampoco sabía que estabas trabajando en el mismo proyecto. – Widor
Estaba hablando en broma, pero la realidad es que el sistema no puede almacenar una marca de tiempo para el segundo intercalar, por lo tanto, no es posible registrar un evento por segundo durante un segundo intercalar. Las reglas comerciales requieren algo que no se puede cumplir fácilmente a través de los medios tradicionales. Repensar las reglas, hacer excepciones para los segundos intercalares, o escribir un código loco loco. –