我在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'吗?
非常感谢!
答案 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)
要将time1
和time2
用作列表:
q)(time1;time2)
13:00:00 13:00:02
如果使用的是实际值,则无需为相似类型的元素指定;
。
(time1;time2)~(13:00:00 13:00:02)
1b