首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kdb表中的模糊查询

kdb表中的模糊查询
EN

Stack Overflow用户
提问于 2018-08-22 10:02:08
回答 3查看 302关注 0票数 1

创建于下表:

代码语言:javascript
复制
    Id   name    class
    1    adcvs    2
    2    adxcg    4
    3    adcbfgf  31
    4    adcbfgr  34
    5    adcbfgy  23
    6    adcbfgo  12

现在,我希望得到name列包含值adcbfg的所有列。我使用了查询:select from table where name in `adcbfg*,请给出我的query.thanks的什么问题

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-22 11:02:06

因为符号只是对字符串的引用,所以如果不首先取消对它们的引用,就不能使用正则表达式函数来获取底层字符串。这就是为什么使用`adcbfg*无效的原因。

出于同样的原因,在字符串正则表达式和sym (例如name="adcbfg*" )之间使用比较运算符将无法工作,因为它们是不同的类型。

like命令( JejeBelfort建议的)允许您在字符串和符号上使用正则表达式,就像在应用正则表达式之前它将首先取消引用它一样。

虽然它可能看起来比仅仅使用字符串更复杂,但是由于符号类型是固定宽度的,它使得查找比使用可变宽度字符串更快。

有关正则表达式的详细信息,请参阅https://code.kx.com/q/cookbook/regex/

票数 2
EN

Stack Overflow用户

发布于 2018-08-22 10:07:18

您需要使用like来执行以下操作:

创建您的表:

代码语言:javascript
复制
table:([]Id:1+til 6;name:`adcvs`adxcg`adcbfgf`adcbfgr`adcbfgy`adcbfgo;class:2 4 31 34 23 12)

Id name    class
----------------
1  adcvs   2    
2  adxcg   4    
3  adcbfgf 31   
4  adcbfgr 34   
5  adcbfgy 23   
6  adcbfgo 12 

然后解析name遵循模式adcbfg的行。

代码语言:javascript
复制
select from table where name like "adcbfg*"

Id name    class
----------------
3  adcbfgf 31   
4  adcbfgr 34   
5  adcbfgy 23   
6  adcbfgo 12   
票数 4
EN

Stack Overflow用户

发布于 2018-08-22 10:51:33

使用like的另一种方法可以是:

代码语言:javascript
复制
table[where(table`name)like"adcbfg*"]

这将使用较少的内存,但需要更长的时间来计算。

此外,有关like关键字的更多细节和示例可以在这里的KX站点上找到:

http://code.kx.com/q/ref/strings/#like

http://code.kx.com/q/cookbook/regex/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51964399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档