功能更新q / kdb中的单个值+

时间:2017-07-25 03:44:07

标签: functional-programming kdb q-lang

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

如果有人可以提供帮助,请表示赞赏。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您可以使用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)]

答案 2 :(得分:0)

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

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