如何在 KDB+/Q 中编写一个在 where 子句中包含当前通配符的函数形式?

问题描述 投票:0回答:2

作为普通 qSQL 查询的示例,我们会这样写:

select from table where sym like "temp*"

选择 `sym 列中以“temp*”开头且后跟任意字符序列的任何元素。

我们如何以函数形式编写它?这纯粹是为了我正在完成的一项作业任务,它要求我使用函数形式重新编写函数。

?[trade; enlist(like;
newCol;($:;enlist
ABC)); 0b; ()]
这在 KX Academy Jupyter Notebook 中效果很好,但是,这没有考虑通配符。

我解析的 select 语句返回给我这个:

?
`table
,,(';(like;`sym);(*;`temp))
0b
()

但是,我不明白如何写这个,在网上找不到任何东西。请帮忙。

kdb
2个回答
0
投票

当我运行该语句时: 解析“从表中选择符号如“temp*”的位置

我得到: ?

table ,,(like;
sym;“温度*”) 0b ()

相当于: ?[

table;enlist(like;
sym;"温度*");0b;()]

您确定您已经正确解析了初始语句吗?


0
投票

构建查询时,您可以使用反斜杠转义引号字符,以允许解析您的查询:

q)parse "select from table where sym like \"temp*\""
?
`table
,,(like;`sym;"temp*")
0b
()

将形成:

?[table;enlist (like;`sym;"temp*");0b;()]

kx 有一个很好的脚本,有助于形成功能选择:

https://code.kx.com/q/wp/parse-trees/#appendix

© www.soinside.com 2019 - 2024. All rights reserved.