SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.03.2019 22:01:43

darkside134
Участник
Зарегистрирован: 13.03.2019
Сообщений: 8

Рандомизация даты и времени в заданном диапазоне

Уважаемые гуру, помогите чайнику, уже неделю сижу с базой, перечитал что только можно, не могу понять как осуществить задачку, ну не доходит до меня никак.
Имеется база:
Изображение

Во всей колонке start_time (выделено красным) нужно заменить дату и время в диапазоне, допустим с 2017 года, с рандомизацией.
Например:
сейчас установлено     нужно получить
2019-02-12 20:50:11   2017-01-11 10:52:33
2019-02-12 20:50:11   2017-09-08 13:42:43
2019-02-12 20:50:11   2018-05-03 20:59:13
2019-02-12 20:50:11   2019-08-12 14:22:18
...                               ...
Вот что удалось найти по теме:
Mysql вставляет случайное время datetime в заданный диапазон времени жизни
Генерировать дни из диапазона дат

Находил ещё примеры, подставлял свои данные, но не сработало у меня, что не так делаю не пойму.
Ребят, если не сложно, покажите на примере моей базы той что на скрине как правильно сформировать код, куда вписать его, будет фундаментом на будущее.
Спасибо огромное за помощь.

Неактивен

 

#2 13.03.2019 22:53:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Рандомизация даты и времени в заданном диапазоне

select '2017-01-01 00:00:00' + interval round(rand()*60*60*24*365*3) second;
-- выдает случайную дату в промежутке от '2017-01-01 00:00:00' до '2017-01-01 00:00:00' + 3 года

соответственно обновление всей таблицы:
update table `имя таблицы` set start_time = '2017-01-01 00:00:00' + interval round(rand()*60*60*24*365*3) second

Неактивен

 

#3 14.03.2019 11:57:09

darkside134
Участник
Зарегистрирован: 13.03.2019
Сообщений: 8

Re: Рандомизация даты и времени в заданном диапазоне

vasya написал:

select '2017-01-01 00:00:00' + interval round(rand()*60*60*24*365*3) second;
-- выдает случайную дату в промежутке от '2017-01-01 00:00:00' до '2017-01-01 00:00:00' + 3 года

соответственно обновление всей таблицы:
update table `имя таблицы` set start_time = '2017-01-01 00:00:00' + interval round(rand()*60*60*24*365*3) second

Благодарю за ответ.
Что я делаю не так, подскажите пожалуйста?
https://prnt.sc/mxoshy

Неактивен

 

#4 14.03.2019 16:59:23

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Рандомизация даты и времени в заданном диапазоне

table -- лишнее, нужно

update `имя таблицы` set start_time = '2017-01-01 00:00:00' + interval round(rand()*60*60*24*365*3) second

Неактивен

 

#5 14.03.2019 17:09:05

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Рандомизация даты и времени в заданном диапазоне

если вам нужен рандом, но по возрастанию, то этот запрос не подойдет

Неактивен

 

#6 15.03.2019 00:54:50

darkside134
Участник
Зарегистрирован: 13.03.2019
Сообщений: 8

Re: Рандомизация даты и времени в заданном диапазоне

Безмерно благодарен Вам, подошло!

update `имя таблицы` set start_time = '2017-01-01 00:00:00' + interval round(rand()*60*60*24*365*3) second
Я так понял числовые значения получается в секундах*минутах*часах*днях*годах.

vasya написал:

если вам нужен рандом, но по возрастанию, то этот запрос не подойдет

Какую команду посоветуете использовать для рандома по возрастанию? Нашел пока только команды для сортировки.

Неактивен

 

#7 15.03.2019 17:21:59

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Рандомизация даты и времени в заданном диапазоне

MariaDB [test]> select * from t;
+----+---------------------+
| id | d                   |
+----+---------------------+
|  1 | 2019-02-12 20:50:11 |
|  2 | 2019-02-12 20:50:11 |
|  3 | 2019-02-12 20:50:11 |
|  4 | 2019-02-12 20:50:11 |
|  5 | 2019-02-12 20:50:11 |
+----+---------------------+
5 rows in set (0.19 sec)

MariaDB [test]> set @i= '2017-01-01 00:00:00';
Query OK, 0 rows affected (0.03 sec)

MariaDB [test]> update t set d =(@i:= @i + interval round(rand()*60*60*24*365*3/5) second) order by id;
Query OK, 5 rows affected (0.25 sec)
Rows matched: 5  Changed: 5  Warnings: 0

MariaDB [test]> select * from t;
+----+---------------------+
| id | d                   |
+----+---------------------+
|  1 | 2017-04-24 23:07:13 |
|  2 | 2017-08-02 19:18:28 |
|  3 | 2018-01-07 02:53:04 |
|  4 | 2018-02-25 04:12:20 |
|  5 | 2018-09-24 12:04:53 |
+----+---------------------+
5 rows in set (0.00 sec)


1) interval round(rand()*60*60*24*365*3/5) - вместо 5 нужно указать кол-во строк в таблице
2) клиент не должен разрывать сессию после каждой команды

Неактивен

 

#8 15.03.2019 18:01:27

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Рандомизация даты и времени в заданном диапазоне

а есть вариант решения без переменных?
базовыми конструкциями sql (многотабличный update, вложенные подзапросы) без cte или оконных функций?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson