Генерация случайных данных временного теста SQL Server 2008 - PullRequest
7 голосов
/ 06 декабря 2010

Я пытаюсь создать большой набор данных, который включает тип данных времени в SQL Server 2008. У меня уже есть некоторые не временные данные в таблице, поэтому я хотел бы сохранить весь процесс в T-SQL и использовать вставку-into-select, чтобы получить частичные данные из одной таблицы и вставить их в следующую вместе с некоторыми сгенерированными данными, включая время.

Я хотел бы получить способ генерировать случайное время (7) между двумя точками, скажем, случайное время между 8:00 и 9:00.Я нашел пост до 2008 года, но ничего, что касалось типа времени SQL Server 2008.

Ответы [ 2 ]

8 голосов
/ 06 декабря 2010

В день 86 400 000 миллисекунд, поэтому вы можете получить случайное значение времени, выполнив следующее:

select dateadd(millisecond, cast(86400000 * RAND() as int), convert(time, '00:00'))

Для вашего примера, когда вы хотите, чтобы время между 8:00 и 9:00 составляло 3600000 миллисекунд в час, поэтому измените запрос следующим образом.

select dateadd(millisecond, cast(3600000 * RAND() as int), convert(time, '08:00'))

Чтобы вставить в новую таблицу, вы можете либо выполнить цикл T-SQL с обновлениями (s ... l ... o ... w ...), либо сделать SELECT INTO из ваш оригинальный стол в новый стол.

4 голосов
/ 06 декабря 2010

Для генерации 100 строк тестовых данных вы можете использовать ниже.

WITH E00(N) AS (SELECT 1 UNION ALL SELECT 1),
        E02(N) AS (SELECT 1 FROM E00 a, E00 b),
        E04(N) AS (SELECT 1 FROM E02 a, E02 b),
        E08(N) AS (SELECT 1 FROM E04 a, E04 b),
        E16(N) AS (SELECT 1 FROM E08 a, E08 b),
        E32(N) AS (SELECT 1 FROM E16 a, E16 b)
SELECT TOP 100 CAST(DATEADD(SECOND,ABS(CHECKSUM(NEWID()))%3600,'08:00') AS TIME)
FROM E32
...