如何在KDB+/Q的函数式查询中使用带通配符的WHERE子句?
Q语言函数式查询实现带通配符的like匹配
要把qSQL语句 select from table where sym like "temp*" 转换成函数式写法,核心是正确构造where子句的条件,具体写法如下:
?[`table; enlist(like; `sym; "temp*"); 0b; ()]
关键说明:
- 函数式查询的结构是
?[表名; 条件列表; 分组标识; 投影列],这里不需要分组和投影,所以后两个参数用0b(不分组)和()(无投影) - where条件需要用
enlist包装成单元素列表(因为只有一个筛选条件) like操作的第三个参数直接传入带通配符的字符串"temp*"即可,通配符*作为字符串的一部分,不需要额外的语法处理
对比你之前的测试代码
你之前运行的 ?[trade; enlist(like;newCol;($:;enlistABC)); 0b; ()] 是用符号(ABC)作为匹配值,而带通配符的场景是字符串匹配,直接传带*的字符串字面量就可以,不需要用$:或者enlist包装符号。
关于你解析的结果
你解析得到的 ,,(';(like;sym);(*;temp)) 是错误的格式,这里的*被当成了操作符,而实际上它应该是匹配字符串的一部分,正确的条件应该是把完整的匹配字符串作为like的第三个参数。
内容的提问来源于stack exchange,提问作者kannic
相关产品推荐
相关产品推荐

