首页 文章

函数不以kdb / q返回值

提问于
浏览
1

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

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

其中time的数据类型为 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 回答

  • 2

    您需要传递@ 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
    
  • 3

    你的函数在你的行 q)func_demo[13:00:00 13:00:02] 中有两个参数time1和time2你只传递一个参数,它是一个时间列表 .

    你的意思是通过 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]
    

相关问题