如何使用like
搜索多个字符串?
q)\l sp.q
q)select from p where city like "lon*"
p | name color weight city
--| -------------------------
p1| nut red 12 london
p4| screw red 14 london
p6| cog red 19 london
我想搜索city
,以“lon”或“par”开头,/:
给出type
错误。
q)select from p where city like/: ("lon*";"par*")
'type
答案 0 :(得分:3)
搜索多个字符串时,您需要使用any
。
q)select from p where any city like/: ("lon*";"par*")
p | name color weight city
--| -------------------------
p1| nut red 12 london
p2| bolt green 17 paris
p4| screw red 14 london
p5| cam blue 12 paris
p6| cog red 19 london
当您使用/:
(每个右侧)搜索时,它会返回2个向量,一个针对“lon *”搜索,另一个针对“par *”。
(0!p)[`city] like/: ("lon*";"par*")
(100101b;010010b)
使用any
执行ORing并返回单个向量。
any (0!p)[`city] like/: ("lon*";"par*")
110111b
现在得到最终结果:
(0!p) where any (0!p)[`city] like/: ("lon*";"par*")
p name color weight city
----------------------------
p1 nut red 12 london
p2 bolt green 17 paris
p4 screw red 14 london
p5 cam blue 12 paris
p6 cog red 19 london
答案 1 :(得分:2)
正如其他人所说,将any
与each-right
一起使用是最好的方法,也是最清晰的。
替代方案(在某些情况下可能有用,对于大型向量可能稍微有效)涉及使用内置的正则表达式功能,如下所示:
q)city:`london`london`newyork`paris
q)city like "[lp][oa][nr]*"
1101b
这里需要注意的是,它还会选择"lan*"
,"lar*"
,"por*"
和"pan*"
,但如果知道这些组合是不可能的,那么它是可行的。
答案 2 :(得分:1)
您需要在where子句中添加any
。现在,您的where
子句正在解析为2个列表
q)city:`london`london`newyork`paris
q)city like/: ("lon*";"par*")
1100b
0001b
q)any city like/: ("lon*";"par*")
1101b
所以...
select from p where any city like/: ("lon*";"par*")