如何将列名传递到 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;()]

https://code.kx.com/q/ref/parse/