2016-11-04 89 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 cast`$正在應用於整行,而不僅僅是「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