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
我正在尝试从 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