如何在Kdb表字段名中添加正斜杠?尝试`$"yes/no":方法无效
嘿,我懂你碰到的这个问题——在kdb+里直接用带正斜杠这类特殊字符的字段名,确实没法像普通字段那样直接定义,因为默认情况下yes/no会被解析成符号的除法操作,而不是字段名的一部分。不过有几个靠谱的解决方案,我给你列出来:
方法1:通过字典转表创建(最直接)
先构建一个键包含正斜杠的字典,再用flip把它转换成表,这样就能直接生成带特殊字符的字段名:
tab: flip `yes/no`num!(`yes`yes`no; 1 2 3)
验证一下字段名:
cols tab // 输出: `yes/no`num
访问这个字段的时候,要注意用括号包裹字段名,避免被解析成除法:
tab[`yes/no] // 输出: `yes`yes`no
方法2:先建普通表,再重命名字段
如果已经有了一个字段名不含特殊字符的表,想要修改成带正斜杠的字段名,可以用xcol函数重命名:
// 先创建普通字段的表 tab:([] yesno:`yes`yes`no; num:1 2 3) // 定义新的字段名列表,包含带正斜杠的名称 newCols:`yes/no`num // 重命名字段 tab: newCols xcol tab
方法3:动态解析表达式创建
如果你想尝试类似$"yes/no":的方式,可以通过parse和eval动态执行包含特殊字段名的表达式:
tab: eval parse "([] `yes/no:`yes`yes`no; num:1 2 3)"
这里parse把字符串转换成kdb+可执行的表达式,eval执行它,这样就能正确识别yes/no作为字段名了。
需要注意的是,之后访问这个字段时,不能用.直接调用(比如tab.yes/no会被解析成tab.yes / no,也就是除法操作),必须用tab[yes/no]或者tab."yes/no"`的形式来访问。
内容的提问来源于stack exchange,提问作者Terry
相关产品推荐
相关产品推荐

