KDB+ using or with where 和 like

KDB+ using or with where and like

我正在尝试从 column_1 和 column_2 获取应用类型 CASPER 和 FOO 的信息。 当我只搜索一个或另一个应用程序类型时,该脚本工作正常。 但是,当使用 'or' 语句在一个输出中包含两个 apptype 时,出现错误。 我认为这只是 'kdb or' 声明。

我没有 KDB 参考手册。

raze{[tradedate] 

setdate tradedate;

`rootordid`clordid xasc

select from( 
        (select column_1, apptype, column_3, from orders where apptype like "CASPER" or "FOO")
         )}each .utl.get_bdts[2017.12.04;2017.12.05]

重写or语句如下:

select column_1, apptype, column_3, from orders where (apptype like "CASPER") or apptype like "FOO"

圆括号(apptype like "CASPER")确保不会抛出长度错误,因为 q 将从右到左读取子句。

您可以使用 any and each right /: 来包含多个术语而不是 or:

select column_1, apptype, column_3 from orders where any apptype like/:("CASPER";"FOO")

这样做的好处是很容易扩展超过 2 个学期。

在您上面的示例中,首先评估 "CASPER" or "FOO",这会导致 'length 错误。

示例:

q)show tab:([]a:1 2 3;b:`CASPER`FOO`BAR)
a b
--------
1 CASPER
2 FOO
3 BAR
q)select from tab where any b like/:("CASPER";"FOO")
a b
--------
1 CASPER
2 FOO