Как одним запросом рандомно расставить даты в таблице SQL?

Статус
В этой теме нельзя размещать новые ответы.

RAPCorp

Постоялец
Регистрация
12 Сен 2012
Сообщения
71
Реакции
10
Народ, выручайте, нужно в таблице раскидать даты для отложенной публикации в формате *nix, чтобы взять к примеру период 01.01.2015 14:33:50 по 20.10.2018 24:32:11 чтобы в таблице в каждой записи рандомно подставились эти даты. Можно ли это сделать SQL запросом или только с PHP выйдет?
 
UPD. Вопрос снимается, я вроде нашёл

Например, нужно изменить все даты в тестовой таблице на случайные.

Для начала попробуем просто сгенерировать любую дату:

Код:
SELECT FROM_UNIXTIME(RAND() * 2147483647) AS `rand`

где 2147483647 это самый большой таймштамп равный "2038-01-18 19:14:07"

Теперь следующий шаг, сгенерируем случайную дату для (например) 2011 года

Код:
SELECT FROM_UNIXTIME(RAND() * (1325275200 - 1293825600) + 1293825600) AS `date_field`

Где 1325275200 = "2011-01-01", а 1293825600 = "2011-12-31" т.е. общий вид формулы:

Код:
RAND() * (end - start) + start

Для большей читаемости можно написать

Код:
(end - start) * RAND() + start

Для перевода из DATETIME в TIMESTAMP можно воспользоваться функцией UNIX_TIMESTAMP:

Код:
UPDATE `tbl_name` SET `date_field` = FROM_UNIXTIME(
  RAND( ) * ( UNIX_TIMESTAMP( '2011-12-31' ) - UNIX_TIMESTAMP( '2011-01-01' ) ) + UNIX_TIMESTAMP( '2011-01-01' )
)

Для просмотра ссылки Войди или Зарегистрируйся
 
UPDATE `your_table` SET `some_date`=RAND(119919600)+1420131952
Как-то так навскидку.

119919600 - это разница в секундах между "01.01.2015" и "20.10.2018", 1420131952 - это "01.01.2015" в *nix


P.S. Поздно) Пока писал уже решился вопрос
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху