KDB +合并多个更新语句

时间:2018-04-10 22:33:06

标签: kdb

q)d:([] f1:`a`b` ;f2:```c; m1:`x``z;m2:``y`z)

f1 f2 m1 m2
-----------
a     x    
b        y 
   c  z  z 

我想更新f1& m1列到f2& m2f1分别为m1 nullsupdate f1:f2 from d where null f1 update m1:m2 from d where null m1` ;实际上我想将这两个查询合并到一个更新语句中:

If you need java Date object use SimpleDateFormat:

SimpleDateFormat inputFormat = new SimpleDateFormat("yyyyMMddHHmm");
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd-HH:mm");
java.util.Date javaDate = inputFormat.parse("201801011200");
System.out.println("java.util.Date=" + javaDate);
System.out.println("output string=" + outputFormat.format(javaDate));

3 个答案:

答案 0 :(得分:5)

您可能想要考虑的另一个选择是fill^,它允许您使用另一个列表中的项填充一个列表中的空值(在这种情况下,列表是表中的列),例如

q)d:([] f1:`a`b` ;f2:```c; m1:`x``z;m2:``y`z)
q)update f2^f1,m2^m1 from d
f1 f2 m1 m2
-----------
a     x
b     y  y
c  c  z  z

答案 1 :(得分:1)

您可以使用三元矢量条件评估 ?

?[vb;exprtrue;exprfalse]

新查询将是:

q)update f1:?[null f1;f2;f1] , m1:?[null m1;m2;m1] from d
f1 f2 m1 m2
-----------
a     x    
b     y  y 
c  c  z  z 

答案 2 :(得分:0)

填充可用于更新空值: 如果要更新表d,则可以使用:
update f2^f1,m2^m1 from`d

![`d;();0b;`f1`m1!((^;`f2;`f1);(^;`m2;`m1))]

如果要在不更新原始表的情况下显示更新输出,则:
update f2^f1,m2^m1 from d

![d;();0b;`f1`m1!((^;`f2;`f1);(^;`m2;`m1))]