如何在Kdb+表指定行中将long列表替换为空long列表?
在Kdb+中更新指定行的列表列为空long列表
错误原因
你触发的'length错误是Kdb+的预期行为:当更新表的列时,右侧赋值的列表长度必须与where子句筛选出的行数一致。你尝试给2行(i=0和2)赋值单个空long列表(long$()),左右长度不匹配,因此报错。
解决方案
1. 已知匹配行数时的直接写法
如果明确where条件匹配的行数(这里是2行),可以生成对应数量的空long列表进行赋值:
t: ([] myCol: 3 cut til 10) update myCol: 2#enlist `long$() from t where i in 0 2
2#enlist long$()`会生成包含2个空long列表的列表,与筛选出的行数匹配,避免长度错误。
2. 未知匹配行数的通用写法
如果不确定where条件匹配的行数,推荐两种通用写法:
方法一:通过count动态获取匹配行数
update myCol: count[where i in 0 2]#enlist `long$() from t where i in 0 2
count[where i in 0 2]会自动计算匹配的行数,再生成对应数量的空long列表。
方法二:使用三元条件函数?
update myCol: ?[i in 0 2; enlist `long$(); myCol] from t
这个写法会逐行判断:满足条件的行赋值为空long列表,不满足的行保留原列值,无需额外写where子句,灵活性更高。
验证结果
执行上述正确语句后,表t的指定行已被更新为空白long列表:
t myCol ------ () 0 1 2 () 6 7 8 9
内容的提问来源于stack exchange,提问作者Ferenc Bodon
相关产品推荐
相关产品推荐

