代码之家  ›  专栏  ›  技术社区  ›  CleanSock

如何使用functional amend将p#添加到表中?

kdb
  •  1
  • CleanSock  · 技术社区  · 7 年前

    我有一个查询,它返回表中日期的一组符号的数据。

    dataFromTab:delete date from select from table where date=2015.01.01,any (sym like) each ("sym1";"sym2";"sym3";"sym4")
    dataFromTab:`sym xasc dataFromTab;
    @[`dataFromTab;`sym;`p#];
    

    类型var是98h,按sym排序工作正常,但当添加p时,使用函数修正会给我一个“类型错误”。

    如果您对我的错误有任何意见,我们将不胜感激。

    谢谢

    2 回复  |  直到 7 年前
        1
  •  3
  •   Gilmer    7 年前

    您是从函数内还是从全局命名空间调用所有这些内容?

    如果dataFromTab是局部变量,则应用 p# to the global reference dataFromTab将不起作用。

    q){data:select from tab;@[`data;`sym;`p#]}[]
    'type
     [1]  {data:select from tab;@[`data;`sym;`p#]}
                             ^
    q))\
    

    您需要在本地重新分配dataFromTab才能工作;

    q){data:select from tab;data:@[data;`sym;`p#]}[]
    

    您还可以使用“set”全局创建表,这将允许您的原始语法工作。然而,您可能不想创建不必要的全局变量;

    q){`data set select from tab;@[`data;`sym;`p#]}[]
    `data
    
        2
  •  0
  •   Thomas Smyth    7 年前

    sym 字符串列?如果转换为字符串,则会出现该错误:

    q)trades:update string sym from trades
    q)trades:`sym xasc trades
    q)@[`trades;`sym;`p#]
    'type
      [0]  @[`trades;`sym;`p#]
           ^
    

    你能试着把它转换成一个符号,看看这是否有效吗?