使用用户定义的函数对循环/对称值执行Sqlite(C API)和查询(选择)

Sqlite (C API) and query (select) on cyclic/symmetric values with user defined functions

本文关键字:选择 Sqlite 执行 API 查询 对称 定义 用户 函数 循环      更新时间:2023-10-16

我在C++中使用Sqlite,并且有两个类似的问题:

1) 我需要选择4个条目来进行插值。

例如,我的表格可能是这样的:

角度(双倍)|颜色(双倍)

0            0.1
30            0.5
60            0.9
90            1.5
...            ...
300            2.9
330            3.5

如果我想插值对应于95°的值,我将使用60°、90°、120°和150°的条目。要获得这些条目,我的请求将是SELECT color FORM mytable WHERE angle BETWEEN 60 and 150,没什么大不了的。

现在,如果我想要335°,我需要300°、330°、360°(=0°)和390°(=30°)。然后我的查询将是SELECT color FORM mytable WHERE angle BETWEEN 300 and 330 OR angle BETWEEN 0 and 30。我不能使用SELECT color FORM mytable WHERE angle BETWEEN 300 and 390,因为这只会返回2种颜色。

我可以使用C API和用户定义函数在查询中包含某种模意义吗?如果我可以使用用户定义的函数来使用查询[...] BETWEEN 300 and 390并得到行300、330、0和30,那就太好了。

2) 另一张表是这样的:

速度(双倍)|颜色(双倍)|var(双倍)

0              0.1         0
10              0.5         1
20              0.9         2
30              1.5         3
...             ...         ...

在现实中,由于对称性,color(speed)=color(-speed),但var(-speer)=myfunc(var(speed))。我希望进行SELECT * FROM mytable WHERE speed BETWEEN -20 and 10之类的查询,并能够使用API以负速度对"虚拟"行进行一些操作,并将其作为常规结果返回。

例如,我希望查询SELECT * FROM mytable WHERE speed BETWEEN -20 and 10的结果如下:

速度(双倍)|颜色(双倍)|var(双倍)

-20             0.9      myfunc(2)
-10             0.5      myfunc(1)
0             0.1        0
10             0.5        1

这可能吗?

谢谢你的帮助:)

我建议使用两个间隔的查询:

从mytable WHERE(速度>=MIN(?1,?2)AND speed<=中选择*MAX(?1,?2))或((MAX(?1,2)>360)AND(速度>=0 AND速度<=MAX(?1,3,2)%360));

如果?1和?2例为阳性。