我需要对KDB表执行全局更新以更新两列。对于FirstName列,我要删除SecondName列中具有空字符串的记录的值,对于FullName列,我想用表中所有行的空格替换编码的分隔符。
如果有帮助,则不必在单个更新语句中完成这些操作。
update
FirstName:$[SecondName like ""; FirstName; ""],
FullName[FullName; " "; " "]
from table
}
我在语法上苦苦挣扎-以上是我的最佳尝试,但没有用。感谢您的帮助。
答案 0 :(得分:2)
在单次更新语句中实现该目标的一种方法:
q) update FirstName:?[SecondName like ""; SecondName;FirstName], FullName:ssr[;" "; " "]@'FullName from table
答案 1 :(得分:2)
对于FirstName的更新,您需要一个?而不是$作为执行控制运算符。因为它使用列表而不是原子来执行。 对于FullName,您将需要使用ssr,它查找字符串中包含“&nbsp”的位置,并将其替换为“”
哪个会给出以下信息:
q)tab:([]FirstName:("aa";"cc");SecondName:("";"dd");FullName:("aa ";"cc dd"))
q)update FirstName:?[SecondName like ""; count[FirstName]#enlist""; FirstName],FullName:ssr[; " ";" "]each FullName from tab
FirstName SecondName FullName
-----------------------------
"" "" "aa "
"cc" "dd" "cc dd"
希望这能回答您的问题。
关于, 桑德
答案 2 :(得分:1)
我建议分两步进行
//create table with mock data
table: ([]FirstName: ("aaa";"ccc"); SecondName: ("bbb";""); FullName: ("aaa bbb";"ccc "));
//step1: set First to "" whenever SecondName is ""
table: update FirstName: (count i)#enlist"" from table where SecondName like "";
//step2: replace spaces in FullName
table: update FullName: ssr[;" ";" "] each FullName from table;
答案 3 :(得分:1)
我认为:
table:update FirstName:(count i)#enlist "" from table where SecondName like "";
table:update FullName:{ ssr[x; " "; " "] } each FullName from table where FullName like "* *";