我想用过去的随机日期或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 |
+----------------+
答案 0 :(得分:3)
实际上,此查询不会获得任何null值,但是如果在此处使用一些case语句,则可以在此处获取此null。 我使用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
您也可以在插入语句中使用它。
答案 1 :(得分:0)
您可以使用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
值的频率来调整此参数