MySQL: заполнение таблицы случайными датами или нулевыми значениями - PullRequest
0 голосов
/ 06 ноября 2019

Я хотел бы заполнить столбец в моей таблице случайными датами из прошлого или пустыми значениями. Я хотел бы установить случайные даты между двумя датами, 1 января 1920 года и 1 декабря 2018 года, или NULL VALUES.

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

INSERT INTO `FootballPlayers` VALUES (SELECT timestamp('2010-04-30') - INTERVAL FLOOR( RAND( ) * 366) DAY);

Iхотел бы, чтобы столбец таблицы имел что-то вроде.

+----------------+
|  Date of Death |
+----------------+
|   20/10/1990   |
|   01/11/1988   |
|   04/02/2006   |
|      NULL      |
|   17/05/2011   |
|   22/04/1972   |
|      NULL      |
|      NULL      |
|   13/04/1989   |
|   10/03/1999   |
+----------------+

Ответы [ 2 ]

2 голосов
/ 06 ноября 2019

На самом деле вы не получаете нулевое значение в этом запросе, но если вы используете здесь какое-то утверждение case, вы можете получить это нулевое значение здесь. Я использовал оператор case-case и получил точный результат. Вот, пожалуйста:

SELECT 
CASE 
WHEN (SELECT FLOOR( RAND( ) * 366))  BETWEEN 50 AND 255 
THEN TIMESTAMP('2010-04-30') -INTERVAL FLOOR( RAND( ) * 366) DAY
ELSE NULL
END time_of_death

Вы также можете использовать это в своем операторе вставки.

0 голосов
/ 06 ноября 2019

Вы можете использовать функцию ELT () .

 SELECT ELT(N,MYRANDOMDATE) AS RANDOMDATE FROM 
        (SELECT TIMESTAMP('2010-04-30') - INTERVAL FLOOR( RAND( ) * 366) DAY AS MYRANDOMDATE, 
                FLOOR(RAND()*(2-1+1))+1  AS N) AS FINAL

Здесь я генерирую случайное число от 1 до 2 вместе со случайной датой. И я предоставляю только один аргумент в функции ELT(). Когда случайное число равно 2, оно даст вам NULL. Вы можете настроить эти аргументы в зависимости от вашей частоты необходимых NULL значений

Проверьте демонстрацию здесь

...