我有下表t:
t:([]sym:3#`ibm;time:10:01:01 10:01:04 10:01:08;price:100 101 105;val:("hello";"world";"test"))
如何执行以下查询:
select from t where val in ("hello"; "test")
我期望得到以下结果:
sym time price val
---------------------------
ibm 10:01:01 100 hello
ibm 10:01:08 105 test
答案 0 :(得分:6)
看起来您的查询确实返回了所需的结果。
或者,可以使用关键字“ like”。
当我们在select语句的末尾使用where子句时,“ where”部分需要一个布尔值来告诉它是否应选择该列。
当我们执行where val in "hello"
时,它实际上将为匹配的字符串字符串的每个元素(当未包装时)返回一个布尔值:
q)val:"hello"
q)val in "hello"
11111b
因此,要获取返回的布尔值,我们使用关键字like
q)val like "hello"
1b
此外,当将字符串列表传递到where子句时,应使用“每个权利”副词来指示where子句对列表的每个实例进行操作。
q)val like/: ("hello";"test")
10b
但是,当where子句期望单个布尔值时,我们再次面对多个布尔值
因此,当出现 hello 或 test 时,我们使用关键字any
返回结果。
q)any val like/: ("hello";"test")
1b
我们可以看到,这给出了所需的结果
q)select from t where any val like/: ("hello";"test")
sym time price val
--------------------------
ibm 10:01:01 100 "hello"
ibm 10:01:08 105 "test"
希望这会有所帮助
答案 1 :(得分:0)
q) select from t where any val like/: ("hello"; "test")
输出:
sym time price val
---------------------------
ibm 10:01:01 100 hello
ibm 10:01:08 105 test