在 select 语句上使用匹配运算符
Using the match operator on select statement
在 kdb 中我有一个选项卡:
tab:flip `items`sales`prices!(`nut`bolt`cam`cog;6 8 0 3;10 20 15 20)
tab
items sales prices
------------------
nut 6 10
bolt 8 20
cam 0 15
cog 3 20
我知道我可以像这样使用正则表达式模式匹配:
select from tab where items like "cam"
为什么我不能以同样的方式使用匹配运算符?:
select from tab where items ~ "cam"
这会产生一个空结果。
q)select from tab where items ~ "cam"
二进制匹配运算符基本上是比较符号列表与字符列表:
q)`nut`bolt`cam`cog~"cam"
0b
因为 o/p 是 0b
,它没有 return 任何记录
select from tab where 0b
如果您仍想使用匹配运算符,以下应该会为您提供正确的结果:
q)select from tab where string[items]~\:"cam"
有关 'match(~)' 和 'like' 工作原理的一些详细信息。也许这会对您的查询有所帮助。
1. Match Function(~): 它比较 2 个对象,returns 如果它们匹配则为真,否则为假。
在你的例子中:
object1 = 项目列表 = `nut`bolt`cam`cog
对象 2 = "cam"
很明显对象 1 与对象 2 不匹配。
如果您想将项目列表中的每个项目与 "cam" 匹配,那么您必须遍历列表。
但是个别项目是一个符号,所以它不会与作为字符串的对象 2 匹配。
q) `cam ~ "cam" / false
因此您需要将项目转换为字符串或将 "cam" 转换为 `cam。这里有两种方法。
q) object1: `nut`cam
q) string[object1] ~\: "cam" / 01b
q) object1 ~\: `cam / 01b
2。 Like Function: 它用于模式匹配,重要的一点是如果左参数是一个列表,那么它会将列表的每个项目与右参数进行比较,而不是像'~'函数那样的完整列表。
也不需要将符号转换为字符串,因为它会在后台自动完成。
q) items: `nut`cam
q) items like "cam" / 01b
在 kdb 中我有一个选项卡:
tab:flip `items`sales`prices!(`nut`bolt`cam`cog;6 8 0 3;10 20 15 20)
tab
items sales prices
------------------
nut 6 10
bolt 8 20
cam 0 15
cog 3 20
我知道我可以像这样使用正则表达式模式匹配:
select from tab where items like "cam"
为什么我不能以同样的方式使用匹配运算符?:
select from tab where items ~ "cam"
这会产生一个空结果。
q)select from tab where items ~ "cam"
二进制匹配运算符基本上是比较符号列表与字符列表:
q)`nut`bolt`cam`cog~"cam"
0b
因为 o/p 是 0b
,它没有 return 任何记录
select from tab where 0b
如果您仍想使用匹配运算符,以下应该会为您提供正确的结果:
q)select from tab where string[items]~\:"cam"
有关 'match(~)' 和 'like' 工作原理的一些详细信息。也许这会对您的查询有所帮助。
1. Match Function(~): 它比较 2 个对象,returns 如果它们匹配则为真,否则为假。
在你的例子中:
object1 = 项目列表 = `nut`bolt`cam`cog
对象 2 = "cam"
很明显对象 1 与对象 2 不匹配。
如果您想将项目列表中的每个项目与 "cam" 匹配,那么您必须遍历列表。
但是个别项目是一个符号,所以它不会与作为字符串的对象 2 匹配。
q) `cam ~ "cam" / false
因此您需要将项目转换为字符串或将 "cam" 转换为 `cam。这里有两种方法。
q) object1: `nut`cam
q) string[object1] ~\: "cam" / 01b
q) object1 ~\: `cam / 01b
2。 Like Function: 它用于模式匹配,重要的一点是如果左参数是一个列表,那么它会将列表的每个项目与右参数进行比较,而不是像'~'函数那样的完整列表。
也不需要将符号转换为字符串,因为它会在后台自动完成。
q) items: `nut`cam
q) items like "cam" / 01b