MySQL генерация случайной даты за нужный период
PETSEE.NET
Все закладки
IT-технологии
Автомобили
Бизнес и финансы
Графика
Животные
Кулинария
Лингвистика
Медицина
Мотоциклы
Музыка
Растения
Спорт
Юмор
Прочее
Основное Разделы Дополнения Участникам
MySQL генерация случайной даты за нужный период
Реклама
 
Проверь свои знания :-)
Ранг:Без мыслей
Статус ответа:Думаю...
Рейтинг знаний:0
Имя участника:
Где Апистограмма Рамиреза?

MySQL генерация случайной даты за нужный период

Как-то в тестовой базе MySQL понадобилось проставить случайные даты для
публикаций за определенный период, где у всех публикаций были бы разные
даты, но с учетом нужного периода.

Эту задачу я решил следующим образом:

Сначала получаю случайное число
RAND()

Так как RAND() возвращает случайное число от 0 до 1 (например 0.774968188046448), то
умножаю это число на нужный мне период.
Напомню, что в сутках 86400 секунд, а значит, чтобы получить период, хотя бы 10
дней, нужно чтобы число секунд было взято за 10 дней!
Для примера возьмем случайное число:
RAND = 0.774968188046448
И количество дней 10 в виде суммы секунд:
86400*10=864000

RAND()*864000
0.774968188046448*864000 = 669572.5144721311

Затем округляем полученное случайное число в большую сторону
CEIL(RAND()*864000)
CEIL(669572.5144721311)=669573
669573/86400 = 8.96 (это почти 9 дней)

Затем, от текущей даты в виде UNIX_TIMESTAMP отнимаем полученное число и получаем
случайную дату в периоде за 10 дней, которая, с этим случайным числом, будет
равна почти 9 суток назад:
UNIX_TIMESTAMP()-(CEIL(RAND()*864000)

Теперь полученную дату в виде секунд приводим в нужный вид даты:
Вид формата "YY-mm-dd HH:mm:ss":
FROM_UNIXTIME(UNIX_TIMESTAMP()-(CEIL(RAND()*864000)),'%Y-%m-%d %T')

Вид формата "YY-mm-dd":
FROM_UNIXTIME(UNIX_TIMESTAMP()-(CEIL(RAND()*864000)),'%Y-%m-%d')

Вид формата "HH:mm:ss":
FROM_UNIXTIME(UNIX_TIMESTAMP()-(CEIL(RAND()*864000)),'%T')

Теперь с этой простой конструкцией можно делать выборку по случайной дате,
или, как в моем случае, обновить дату всех публикаций сайта случайными
датами за нужный период, где в моем примере, это 10 дней.

SQL-запрос для вывода случайной даты:
SELECT
FROM_UNIXTIME(UNIX_TIMESTAMP()-(CEIL(RAND()*864000)),'%Y-%m-%d %T'),
FROM_UNIXTIME(UNIX_TIMESTAMP()-(CEIL(RAND()*864000)),'%Y-%m-%d') as `date`,
FROM_UNIXTIME(UNIX_TIMESTAMP()-(CEIL(RAND()*864000)),'%T') as `time`

25.04.2016 / Андрей / Рейтинг: 0.00 (0 голосов) 

<<<
<
1
2
3
4
5
6
7
8
9
10
11
>
>>>
Всего страниц: 1
Комментарии:
Добавить комментарий
Ваше имя:
Введите код:
Текст комментария:
Защищено www.petsee.net
2009 — 2017