2

我有一个烦人的问题。我们在 kdb+ 数据库中获得了股票代码 AGN-A,但似乎几乎不可能查询该代码是否在代码列表中。以下查询根本不起作用:

`$"A-o" in (`$"A-o";`R)

知道如何解决这个问题吗?

4

4 回答 4

5

不起作用的原因是因为您在投射之前进行了比较。您需要先投射然后比较:

q)(`$"A-o") in (`$"A-o";`R)
1b
于 2016-11-04T21:51:15.883 回答
2

最初的符号转换 `$ 被应用于整行,而不仅仅是“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)
于 2016-11-04T21:53:11.987 回答
1

尝试在 in 的左参数周围加上括号,如下所示:

(`$"A-o") in (`$"A-o";`R)

因此,在表格中,尝试:

t:([] sym:(`$"A-o";`R;`IBM); col2:1 2 3)
select from t where sym = `$"A-o"
于 2016-11-04T21:51:48.283 回答
0

其他答案涵盖了如何使用括号来修复执行顺序。但是,可以通过使用.Q.id清除坏字符的函数来处理没有“-”等字符的符号,因此不需要转换:

q).Q.id each (`$"A-o";`R)
`Ao`R

将上面的示例简化为:

q)`Ao in .Q.id each (`$"A-o";`R)
1b
于 2017-12-03T09:25:12.647 回答