我有一个烦人的问题。我们在 kdb+ 数据库中获得了股票代码 AGN-A,但似乎几乎不可能查询该代码是否在代码列表中。以下查询根本不起作用:
`$"A-o" in (`$"A-o";`R)
知道如何解决这个问题吗?
不起作用的原因是因为您在投射之前进行了比较。您需要先投射然后比较:
q)(`$"A-o") in (`$"A-o";`R)
1b
最初的符号转换 `$ 被应用于整行,而不仅仅是“Ao”字符串。q 是从左到右。括号是你的答案。
q)`$"A-o" in (`$"A-o";`R)
'type
[0] <>:0: `$"A-o" in (`$"A-o";`R)
^
q)(`$"A-o") in (`$"A-o";`R)
1b
q)
尝试在 in 的左参数周围加上括号,如下所示:
(`$"A-o") in (`$"A-o";`R)
因此,在表格中,尝试:
t:([] sym:(`$"A-o";`R;`IBM); col2:1 2 3)
select from t where sym = `$"A-o"
其他答案涵盖了如何使用括号来修复执行顺序。但是,可以通过使用.Q.id
清除坏字符的函数来处理没有“-”等字符的符号,因此不需要转换:
q).Q.id each (`$"A-o";`R)
`Ao`R
将上面的示例简化为:
q)`Ao in .Q.id each (`$"A-o";`R)
1b