Skip to content

Cómo generar fechas aleatorias en SQL Server

Anteriormente he mostrado consideraciones importantes para obtener valores random cumpliendo nuestras espectativas. Similar es el caso cuando vas a trabajar con otros tipos de datos. En este artículo revisaremos cómo generar fechas aleatorias en SQL Server.

Antes de empezar

No te olvides revisar el funcionamiento de la función RAND. Mucho de lo que se explica en el artículo Cómo generar números aleatorios en SQL Server, será utilizado aquí.

Otro punto importante es conocer los tipos de datos de fechas que pueden ser utilizados en TSQL. Debes tener en mente los tamaños, precisiones y formatos de la información que puedes generar y puedes ver todos los detalles en la documentación oficial.

¿Qué precisión utilizas?

Lo primero que debes responder es si necesitas generar valores aleatorias de fecha con precisión también de hora. Si usar date no te basta y necesitas utilizar datetime, pues de la misma manera, deberás analizar la necesidad de trabajar con segundos, milisegundos u otros valores de acuerdo con la precisión que te decía.

Ya has visto el enlace a la documentación oficial así que ya debes tener más claro los tipos de datos con los que trabajarás.

Generar fechas aleatorias en SQL Server

Cuando trabajas con datos aleatorios, usualmente necesitas tener un rango sobre el cuál trabajar. Personalmente me gusta elegir una fecha máxima (o mínima) con la que voy a trabajar y sobre ella empiezo a adicionar (o restar) valores de acuerdo con la necesidad.

Voy a simular un ejemplo en el que necesitamos generar valores aleatorios en un rango de horario laboral. Digamos entre 08:30 y 17:30. De acuerdo con la precisión con la que se va a trabajar, tenemos diferentes opciones.

1. PRECISIÓN DE MINUTOS

Entre las horas laborales del ejemplo se consideran 9 horas. Si vamos a sumar a la hora base números aleatorios, podremos hacerlo hasta con 540 minutos.

DECLARE @Date1 datetime
SET @Date1 = '2020-05-16 08:30:00.000'

SELECT DATEADD(MINUTE, CAST(RAND(CHECKSUM(NEWID())) * 540 as INT), @Date1) as DateAndTime
GO 10
fechas-aleatorias-en-sql-server
Precisión a minutos

2. PRECISIÓN DE SEGUNDOS

Entre las horas laborales del ejemplo se consideran 9 horas. Si vamos a sumar a la hora base números aleatorios, podremos hacerlo hasta con 32400 segundos.

DECLARE @Date1 datetime
SET @Date1 = '2020-05-16 08:30:00.000'

SELECT DATEADD(SECOND, CAST(RAND(CHECKSUM(NEWID())) * 32400 as INT), @Date1) as DateAndTime
GO 10
generar-fechas-aleatorias-en-sql-server
Precisión a segundos

3. PRECISIÓN DE MILISEGUNDOS

Entre las horas laborales del ejemplo se consideran 9 horas. Si vamos a sumar a la hora base números aleatorios, podremos hacerlo hasta con 32400000 milisegundos.

DECLARE @Date1 datetime
SET @Date1 = '2020-05-16 08:30:00.000'

SELECT DATEADD(MILLISECOND, CAST(RAND(CHECKSUM(NEWID())) * 32400000 as INT), @Date1) as DateAndTime
GO 10
generar-fechas-aleatorias
Precisión a milisegundos

Consideraciones a las fechas aleatorias en SQL Server

La primera que te decía. Por eso es vital conocer la precisión con la que se va a trabajar.

Maneras de generar datos aleatorios hay muchas. La intención no es mostrar que esta fuera la única.

Puedes ver otros ejercicios como en el ejemplo de Generar Millones de datos Aleatorios en SQL Server.

www.datoptim.com
I love working on SQL Server Performance Tuning and finding the origin of the problems. Music and SQL Server passionate.

Carrito
Volver arriba