需要帮助在SQLite中添加随机浮点数

时间:2014-05-21 13:47:42

标签: sqlite random

我正在尝试将随机浮点数添加到SQLite中整个列的现有值

为现有的数字添加数字应该很难,UPDATE myTable SET Column1=Column1+1应该有效。如果我是正确的,它将获得column1中的每个值并为其添加1。

问题是得到随机数,我的目标是得到类似的东西

UPDATE mytable SET Column1=(Column1 + (RAND Between 0.5 AND 0.8));

所以每行都添加了一个不同的随机浮点数,它是在添加了2个浮点数之间生成的。

我的问题是我在SQLite下找到的随机参考是随机函数生成一个整数。

3 个答案:

答案 0 :(得分:2)

您可以在SQLite的间隔(-1,1)中获得一个随机浮点数,如下所示:

SELECT RANDOM() / CAST(-9223372036854775808 AS REAL)

因此,您可以使用以下符号获取标准随机数区间[0,1)中的值:

SELECT 0.5 - RANDOM() / CAST(-9223372036854775808 AS REAL) / 2

......并从那里进行适当修改。

答案 1 :(得分:1)

documentation说:

  

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

因此要获得介于-1和1之间的数字,您必须将返回值除以9223372036854775808。

要获得0到1之间的数字,除以2×9223372036854775808,然后加上½。

要获得其他范围,请适当缩放并添加偏移量:

UPDATE MyTable
SET Column1 = Column1 + (random() / 18446744073709551616 + 0.5) * 0.3 + 0.5;

答案 2 :(得分:0)

尽管这里的其他答案同样是有效的方法,但我应该提到SQLite has an API for calling foreign functions,它在多种语言的绑定中公开。这可以让您定义到宿主语言的随机函数的绑定,而不是使用内置的绑定。例如,在Python中,使用其sqlite3模块,就很简单:

import random, sqlite3
db_conn = sqlite3.connect(":memory:")

# A function named "random_between" with 2 arguments
# that calls the python function random.uniform
db_conn.create_function('random_between', 2, random.uniform)

results = db_conn.execute("SELECT random_between(0.3, 0.8)").fetchall()
print(results)

这避免了用算术使SQL查询混乱,并使它看起来更像您最初的目标。它确实需要您通过C API或特定于该语言的绑定来运行查询,但这不能作为“纯SQL”解决方案。