函数未以kdb / q返回值

时间:2018-06-28 17:41:25

标签: kdb

我在kdb / q中有一个函数声明:

q)func_demo:{[time1;time2] select from t where time within(time1 time2)}

其中时间的数据类型为v。而且查询工作完美。

我两次传入函数:

q)func_demo[13:00:00 13:00:02]

但是控制台中没有显示表格,它给了我类似的东西

{[time1;time2] select from tt where tp_time within(time1 time2)}[13:00:00 13:00:02]

有人可以给我一些如何处理此问题的提示吗?是因为我在传递参数时没有将13:00:00转换为键入'v'吗?

非常感谢!

2 个答案:

答案 0 :(得分:3)

您的函数采用两个参数time1和time2 在您的行q)func_demo[13:00:00 13:00:02]中,您只传递了一个参数,该参数是时间列表。

您是否打算通过q)func_demo[13:00:00;13:00:02]

返回的实际上是函数投影。下面的代码来解释

q)f:{x+y}
q)f[2;2]
4
q)f[2 2]
{x+y}[2 2]
q)proj:f[2 2]
q)proj 10 100
12 102
q)proj
{x+y}[2 2]

答案 1 :(得分:1)

您需要按照@ emc211的建议传递参数;但是您使用的(time1 time2)

功能存在问题
{[time1;time2] select from tt where tp_time within(time1 time2)}[13:00:00;13:00:02]

应该是(time1;time2)之后的;-分号(time1

{[time1;time2] select from tt where tp_time within(time1; time2)}[13:00:00;13:00:02]

说明:

time1:13:00:00
time2:13:00:02

这类似于time1@time2

q)(time1 time2)
'type
[0]  (time1 time2)

要将time1time2用作列表:

q)(time1;time2)
13:00:00 13:00:02

如果使用的是实际值,则无需为相似类型的元素指定;

(time1;time2)~(13:00:00 13:00:02)
1b