在MySQL中创建序列?

问题描述 投票:-2回答:1

[我在文章中看到我们可以使用rand()和floor()函数创建从0到1的序列

mysql

SELECT floor(rand(0)*2) FROM security.users;

+------------------+
| floor(rand(0)*2) |
+------------------+
|                0 |
|                1 |
|                1 |
|                0 |
|                1 |
|                1 |
|                0 |
|                0 |
|                1 |
|                1 |
|                1 |
|                0 |
|                1 |
|                1 |
|                1 |
|                0 |
+------------------+
16 rows in set (0.00 sec)

还有其他方法可以实现这一目标吗?*我不谈论auto_increment;

mysql sql random
1个回答
0
投票

如果随机性/可预测性的程度不重要,则可以,还有其他方法可以生成1s和0s的序列。

例如,我们可以通过以一定间隔从系统时钟中检索微秒来模拟0和1的伪随机生成,假设如果我们将每个调用间隔一点点,则微秒的值将是相当随机的偶数或奇数。时间。

例如,类似这样的东西:

SELECT n.i
  FROM ( SELECT MICROSECOND(SYSDATE(6)) MOD 2 AS i, SLEEP(0.000001)
         UNION ALL SELECT MICROSECOND(SYSDATE(6)) MOD 2, SLEEP(0.000001)
         UNION ALL SELECT MICROSECOND(SYSDATE(6)) MOD 2, SLEEP(0.000001)
         UNION ALL SELECT MICROSECOND(SYSDATE(6)) MOD 2, SLEEP(0.000001)
         UNION ALL SELECT MICROSECOND(SYSDATE(6)) MOD 2, SLEEP(0.000001)
         UNION ALL SELECT MICROSECOND(SYSDATE(6)) MOD 2, SLEEP(0.000001)
       ) n

返回:

     i  
  ----
     0
     0
     1
     1
     0
     1  

注意:此答案为“是”,还有其他生成1和0的方法。这个答案并不意味着这里的演示是best方法。这只是生成一系列1和0的查询的示例。


[还有其他带有RAND()的表达式会生成0或1,例如

ROUND(RAND()*1000,0) MOD 2
© www.soinside.com 2019 - 2024. All rights reserved.