如何将列名传递到 KDB QSQL 中的 select?
How do I pass a column name into a select in KDB QSQL?
我正在尝试将查询包装到一个函数中,以便我可以任意调用它。
我正在努力为 where
子句传递列名。在裸 QSQL 中,我可以只做 select from n where premarketGap > 0
,但是如果我尝试将它包装在一个函数中,并将 premarketGap
作为符号传递,它会失败。
我该怎么做?
以下是我的各种尝试:
QSQL:
mq: {[data;column;center;width] select from data where (column > (center - width)) and (column < (center + width))}
功能SQL尝试:
mq:{[data;column;center;width] ?[data;(column > (center - width)),(column < (center + width));();()]}
调用函数:
mq[n;`premarketGap;0.43;0.05]
裸功能尝试:
?[n;(`premarketGap > 0);();()]
您可以使用 parse
来帮助形成功能性 qsql 查询:
parse "select from data where (column > (center - width)) and (column < (center + width))"
?
`data
,,(&;(>;`column;(-;`center;`width));(<;`column;(+;`center;`width)))
0b
()
q)
/ remove the backticks from center, width and column as they are presumed to be columns by parse
?[`data;enlist (and;(>;column;(-;center;width));(<;column;(+;center;width)));0b;()]
我正在尝试将查询包装到一个函数中,以便我可以任意调用它。
我正在努力为 where
子句传递列名。在裸 QSQL 中,我可以只做 select from n where premarketGap > 0
,但是如果我尝试将它包装在一个函数中,并将 premarketGap
作为符号传递,它会失败。
我该怎么做?
以下是我的各种尝试:
QSQL:
mq: {[data;column;center;width] select from data where (column > (center - width)) and (column < (center + width))}
功能SQL尝试:
mq:{[data;column;center;width] ?[data;(column > (center - width)),(column < (center + width));();()]}
调用函数:
mq[n;`premarketGap;0.43;0.05]
裸功能尝试:
?[n;(`premarketGap > 0);();()]
您可以使用 parse
来帮助形成功能性 qsql 查询:
parse "select from data where (column > (center - width)) and (column < (center + width))"
?
`data
,,(&;(>;`column;(-;`center;`width));(<;`column;(+;`center;`width)))
0b
()
q)
/ remove the backticks from center, width and column as they are presumed to be columns by parse
?[`data;enlist (and;(>;column;(-;center;width));(<;column;(+;center;width)));0b;()]