【问题标题】:Function does not return value in kdb/q函数在 kdb/q 中不返回值
【发布时间】:2018-06-28 17:41:25
【问题描述】:

我在 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'吗?

非常感谢!

【问题讨论】:

    标签: kdb


    【解决方案1】:

    你的函数有两个参数 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]
    

    【讨论】:

    • 谢谢。但如果我通过 q)func_demo[13:00:00;13:00:02],它会给我 ERROR: 'type (wrong type)
    • tp_time v(datatype) s(attribute) instrument_id i(datatype)
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-08
      • 1970-01-01
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多