【问题标题】: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]]