MySQL:使用随机日期或空值填充表

f5emj3cl  于 2022-11-21  发布在  Mysql
关注(0)|答案(3)|浏览(167)

我希望使用过去的随机日期或Null值填充表中的列。我希望将随机日期设置为介于1920年1月1日和2018年12月1日这两个日期之间,或设置为NULL值。
我遇到了一些令人困惑的代码,这些代码可能是在特定时期生成随机日期的解决方案,但它不适合空值。

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

我希望表的列具有类似的内容。

+----------------+
|  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   |
+----------------+
bnl4lu3b

bnl4lu3b1#

实际上,通过这个查询不会得到任何空值,但如果在这里使用一些case语句,则可以在这里得到这个空值。我使用了when-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

您也可以在insert语句中使用它。

qlzsbp2j

qlzsbp2j2#

可以使用**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值的频率来调整这个参数
Check demo here

pkln4tw6

pkln4tw63#

作为一个方便的单个IF表达式:

SELECT IF(RAND() > 0.2, TIMESTAMP(NOW()) - INTERVAL FLOOR(RAND() * 43200) MINUTE, NULL)

相关问题