2016-11-04 18 views
2

私は迷惑な問題があります。 kdb +データベースに株価記号AGN-Aがありますが、このシンボルがシンボルリストにある場合、照会することはほとんど不可能です。次のクエリはまったく動作しません。KDBのマイナス記号を含むシンボルの扱い方は?

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

この問題を解決する方法はありますか?

答えて

3

キャストする前に比較しているために機能しない理由があります。

q)(`$"A-o") in (`$"A-o";`R) 
1b 
+0

一般的には、あなたのシンボルに文字が入っている場合は厄介かもしれませんが、例で行っているようにキャストされた文字列を扱うのであれば問題ありません – terrylynch

1

では、のようにするには、左側の引数の周りに括弧を入れてみてください::だから

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

、テーブルに、試してください:あなたは、最初にキャストして比較する必要が

t:([] sym:(`$"A-o";`R;`IBM); col2:1 2 3) 
select from t where sym = `$"A-o" 
2

最初のsymキャスト `$が" 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) 
0

その他の答えは、括弧を使用して実行順序を修正する方法をカバーしています。 「 - 」しかし、のような文字なしの記号に対応することが可能となる変換は必要ありませんように、不正な文字を削除する機能.Q.idを使用することにより:

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

は、上記の例を簡素化する:

q)`Ao in .Q.id each (`$"A-o";`R) 
1b 
関連する問題