【问题标题】:functional update single value in q/kdb+q/kdb+ 中的功能更新单个值
【发布时间】:2017-07-25 03:44:07
【问题描述】:
t:([] col1:`aa`bb`cc;col2:`aaa`bbb`ccc);  
field1:`col1;  
field2:`col2;  
v1:`aa;  
v2:`aaaa; 

我希望通过功能更新获得与

相同的结果
update col2:`aaaa from t where col1=`aa;  

我试过了

![t;enlist (=;field1;enlist v1);0b;(enlist field2)!(enlist v2)]; 

但它给了我一个错误'aaaa

感谢有人能提供帮助。

【问题讨论】:

    标签: functional-programming kdb q-lang


    【解决方案1】:
    ![t;enlist (=;field1;enlist v1);0b;(enlist field2)!(enlist enlist v2)]
    

    【讨论】:

    【解决方案2】:

    您可以使用parse 函数将更新表达式转换为解析树,您可以从中轻松读取函数更新的正确参数。

    q)parse"update col2:`aaaa from t where col1=`aa"
    !
    `t
    ,,(=;`col1;,`aa)
    0b
    (,`col2)!,,`aaaa
    

    回想一下,一元 ,enlist,所以查询的函数形式是

    ![t;enlist(=;`col1;enlist `aa);0b;(enlist `col2)!enlist enlist `aaaa]
    

    或者,使用变量名,

    ![t;enlist(=;field1;enlist v1);0b;(enlist field2)!(enlist enlist v2)]
    

    【讨论】:

      【解决方案3】:

      它不是功能更新形式,但这是您可以更新表格的另一种方式

       @[t; where t[`col1] =`aa; :; enlist[`col1]!enlist[`aaaa]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多