在下表中创建
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*
,请给我关于查询的问题的建议。谢谢
答案 0 :(得分:4)
您需要使用like
来执行此操作:
创建表格:
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
的行:
select from table where name like "adcbfg*"
Id name class
----------------
3 adcbfgf 31
4 adcbfgr 34
5 adcbfgy 23
6 adcbfgo 12
答案 1 :(得分:2)
由于符号仅是对字符串的引用,因此不能在不先引用它们以获得基础字符串的情况下使用正则表达式函数。这就是使用`adcbfg*
无效的原因。
出于同样的原因,在字符串正则表达式和诸如name="adcbfg*"
之类的符号之间使用比较运算符将不起作用,因为它们是不同的类型。
JejeBelfort建议的like
命令允许您在字符串和符号上都使用正则表达式,就像使用符号一样,它将在应用正则表达式之前先对其进行取消引用。
尽管看起来似乎不仅仅使用字符串要复杂,但由于符号类型是固定宽度的,因此其查找速度比使用宽度可变的字符串要快
有关正则表达式的更多信息,请参见https://code.kx.com/q/cookbook/regex/
答案 2 :(得分:1)
使用like
的另一种方法可能是:
table[where(table`name)like"adcbfg*"]
这将使用较少的内存,但需要更长的时间来计算。
此外,可以在KX网站上找到有关like
关键字的更多详细信息和示例: