【问题标题】:Set values for all records in a Kdb table based on values of other columns根据其他列的值设置 Kdb 表中所有记录的值
【发布时间】:2019-07-23 14:47:25
【问题描述】:

我需要对 KDB 表执行全局更新以更新两列。对于 FirstName 列,我想删除 SecondName 列中具有空字符串的记录的值,对于 FullName 列,我想用表中所有行的空格替换编码分隔符。

如果有帮助,这些不需要在单个更新语句中完成。

update
    FirstName:$[SecondName like ""; FirstName; ""],
    FullName[FullName; " "; " "]
    from table
    }

我在语法上苦苦挣扎 - 以上是我最好的尝试,但它不起作用。

【问题讨论】:

  • 如果有帮助,请考虑对列名的引用,例如向量,而不是标量...

标签: kdb


【解决方案1】:

在单一更新语句中实现这一目标的一种方法:

q) update FirstName:?[SecondName like ""; SecondName;FirstName], FullName:ssr[;" "; " "]@'FullName from table

【讨论】:

  • Blimey - 很快 :) 我只在 10 分钟前刷新了页面,并且在发布我自己的解决方案之前没有再次刷新 - 不过你的肯定比我的好,谢谢!
  • 很高兴它有帮助。
【解决方案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"

希望这能回答你的问题。

问候, 砂光机

【讨论】:

  • 非常感谢 Sander - 似乎有很多不同的方法可以达到这个结果。我有一些现在可以工作的东西,所以不会浪费时间尝试提供的每一个解决方案,但我非常感谢你的意见:)
【解决方案3】:

我建议分两步完成

//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;

【讨论】:

  • 哈 - 和我的非常相似 - 惊讶于我这么快就收到了这么多回复 - 非常感谢 :)
【解决方案4】:

我想知道了:

table:update FirstName:(count i)#enlist "" from table where SecondName like "";
table:update FullName:{ ssr[x; " "; " "] } each FullName from table where FullName like "* *";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    相关资源
    最近更新 更多