[SQL] Stored ProcedureTo Generate Random Time of Day
Here is a function that will generate a random time of day. Later I will show why I am posting this particular query and how I am using it. It comes in useful when trying create random scheduled jobs in SQL Server. I made use of a technique for generating random dates via Jon Galloway.
Parameter | DataType | Extra | Description ————|———-|————-|———— @timeOfDay |int |OUTPUT | Represents a time of day using the format HHMMSS. For example, midnight is represented as 0 and 1:52:01 PM is represented as 135201. @maxHour |int |Default = 24 | Upper bound for the hour of the day. So to generate a random time of day between midnight and 3 AM, specify 3.
Here is an example of its usage.
-- Generate time of day between midnight and 3
DECLARE @timeOfDay int
exec GetRandomTimeOfDay @timeOfDay OUTPUT, 24
PRINT @timeOfDay
And here is the stored procedure declaration itself. Notice I am creating this procedure within the master database.
USE [master]
GO
CREATE PROCEDURE [dbo].GetRandomTimeOfDay
(
@timeOfDay int = 0 OUTPUT
, @maxHour int = 24 -- Upper bound for the hour.
)
AS
BEGIN
IF @maxHour > 24 OR @maxHour < 1
RAISERROR ('Choose value between 1 and 24', 16, 1)
DECLARE @randomHours int
SELECT @randomHours =
(@maxHour - 1) *
RAND(CAST(CAST(newid() as binary(8)) as INT))
DECLARE @randomMinutes int
SELECT @randomMinutes =
60 * RAND(CAST(CAST(newid() as binary(8)) as INT))
DECLARE @timeOfDayDate DateTime
SET @timeOfDayDate = '00:00:00'
SET @timeOfDayDate =
DATEADD(hh, @randomHours, @timeOfDayDate)
SET @timeOfDayDate =
DATEADD(mi, @randomMinutes, @timeOfDayDate)
DECLARE @timeAsString varchar(8)
DECLARE @timeWithoutColons varchar(6)
SET @timeAsString = CONVERT(varchar(8), @timeOfDayDate, 8)
SET @timeWithoutColons = REPLACE(@timeAsString, ':', '')
SET @timeOfDay = ( CAST(@timeWithoutColons as int) )
END
GO
In a later installment, I will show you why this is useful.
You can download the SQL in a zip file
Comments
4 responses