在KDB中更改HDB中的值

时间:2018-11-13 21:29:57

标签: kdb

我想将hdb的一列中的某个值更改为另一值。我尝试使用dbmaint软件包。但是我遇到了一些类型错误。

这是我的代码

fncol[DB;TBL;`col;{x:ssr[string x;"100";"i"$"0"]}];

我正在尝试将此列中的值100更改为0,以将hdb中的所有日期更改为

3 个答案:

答案 0 :(得分:2)

fncol[`:.;`tab;`a;{@[x;where x=100;:;0]}]

在这种情况下,您的lambda函数可以利用修正: https://code.kx.com/q/ref/lists/#amend

我认为它是整数列。 上面的代码在当前值为100的索引处将值更改为0。

在将其应用到重要数据库之前,我会强调对它进行彻底的测试。

答案 1 :(得分:2)

在您的函数中,您似乎正在尝试将字符串值100替换为整数值0。您会发现这很困难,因为如果起始列表是字符串列表,则kdb将不允许您进行更改某些值会变成其他类型。

q)l:("a";"b";"c")
q)l[0]:1
'type
  [0]  l[0]:1
           ^
q)l[0]:"d"
q)l
"dbc"

"i"$"0"会将字符串转换为整数类型,而"I"$"0"会将“ 0”内的文本解析为整数值。实际上,这意味着"i"$"0"将变成48i,因为ASCII中的“ 0”是48,而不是0。

如果在收到类型错误并进入调试模式(由q提示符处的多个方括号表示)后,可以使用函数.z.ex.z.ey查看失败的函数和参数,使调试更容易

答案 2 :(得分:1)

出现类型错误的原因是因为您尝试将嵌套列表(字符串列表)放入ssr函数。

我相信像{?[x=100;0;x]}这样的向量条件会更好地满足您的需求。此函数在x上明智地评估if语句元素,在true时返回0,在false时返回原始值。