sql - 在WHERE子句中使用随机函数

标签 sql sqlite android-sqlite

在我的WHERE子句中,我使用random函数获取1到5之间的随机数。但是结果始终为空,没有任何错误。

这里是:

Select Question._id, question_text, question_type, topic, favorite,   
picture_text, picture_src, video_text, video_src, info_title, info_text, 
info_picture_src, topic_text
FROM Question 
LEFT JOIN Question_Lv ON Question._id = Question_Lv.question_id 
LEFT JOIN Info ON Question._id = Info.question_id 
LEFT JOIN Info_Lv ON Question._id = Info_Lv.question_id 
LEFT JOIN Picture ON Question._id = Picture.question_id 
LEFT JOIN Picture_Lv ON Question._id = Picture_Lv.question_id 
LEFT JOIN Video ON Question._id = Video.question_id 
LEFT JOIN Video_Lv ON Question._id = Video_Lv.question_id 
LEFT JOIN Topic ON Question.topic = Topic._id 
LEFT JOIN Topic_Lv ON Topic._id = Topic_Lv.topic_id 
LEFT JOIN Exam ON Question._id = Exam.question_id 
WHERE Exam.exam = (random() * 5+ 1)


在这种情况下随机函数在做什么,以及如何正确使用它?

最佳答案

来自Docs


随机()

random()函数返回介于之间的伪随机整数
-9223372036854775808和+9223372036854775807。


因此,您的随机值不在您假设的0到1之间,因此没有行。

通过将其除以2×9223372036854775808并加上0.5,可以得到0到1之间的值。

random() / 18446744073709551616 + 0.5


因此,您的where子句变为:

WHERE Exam.exam = ((random() / 18446744073709551616 + 0.5) * 5 + 1)


与以下内容相同:

WHERE Exam.exam = 5 * random() / 18446744073709551616 + 3.5


另外,您可能需要舍入右侧计算的输出,因此:

WHERE Exam.exam = round(5 * random() / 18446744073709551616 + 3.5)

关于sql - 在WHERE子句中使用随机函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41532552/

相关文章:

java - 错误 无法从 CursorWindow 读取第 0 行,第 -1 列。在访问数据之前确保游标已正确初始化

java - 无法执行操作,因为插入数据库时​​没有当前事务

c# - 带有 SQL 复选框字段的 GridView 列

mysql - 关于 MySQL 分组依据

sqlite - 在Firedac Sqlite数据库连接上插入后如何制作事件?

java - 在 Android SQLite 中处理 "complex"数据库

android - 如何在android中使用现有数据库?

php - MySQL Order by Decimal with whitespace

mysql - SQL子查询问题

android - 在安装Android应用程序时将静态数据加载到Sqlite DB中