我需要在 MySQL 中选择整数范围。像这样的东西
SELECT RANGE(10,20) AS range;
returns
10, 11, 12, 13, 14, ..., 20
Why?
我想从尚未注册的范围中选择随机电话号码。这是想法。
SELECT RANGE(100000,999999) AS range FROM phone WHERE phoneNum <> range LIMIT FLOOR(100000 + RAND()*(899999);
您的查询有问题:
- 你不能使用
range
在 WHERE 子句中。它是一个别名,只有在执行 WHERE 子句后才会定义。
- 即使您可以使用它,使用以下方法将一个数字与一组数字进行比较也是没有意义的
<>
。一般来说,你可以使用IN(...)
,但在你的特殊情况下你应该使用BETWEEN 100000 and 999999
并避免需要RANGE
功能。
- 如果你只想要一个数字,那么限制应该是 1,而不是随机的。通常选择您使用的随机项目
ORDER BY RAND()
.
尝试使用此查询:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
如果您想查找表中没有的数字,并且可用数字尚未接近耗尽(例如分配的数字少于 80%),一个好的方法是生成随机数字并检查它们是否已分配,直到找到一个不存在的数字。 't。
可能存在纯粹的 MySQL 解决方案,但我认为它需要一些扭曲的连接、随机和模数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)