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

Тема в разделе "Базы данных", создана пользователем RAPCorp, 14 мар 2017.

Статус темы:
Закрыта.
Модераторы: latteo
  1. RAPCorp

    RAPCorp Постоялец

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

    RAPCorp Постоялец

    Регистр.:
    12 сен 2012
    Сообщения:
    66
    Симпатии:
    5
    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' )
    )
    http://www.oddler.ru/i/82
     
  3. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    648
    Симпатии:
    513
    UPDATE `your_table` SET `some_date`=RAND(119919600)+1420131952
    Как-то так навскидку.

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


    P.S. Поздно) Пока писал уже решился вопрос
     
Статус темы:
Закрыта.