我想将hdb的一列中的某个值更改为另一值。我尝试使用dbmaint软件包。但是我遇到了一些类型错误。
这是我的代码
fncol[DB;TBL;`col;{x:ssr[string x;"100";"i"$"0"]}];
我正在尝试将此列中的值100更改为0,以将hdb中的所有日期更改为
。答案 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时返回原始值。