在选择中如何紧凑地使用多个或

时间:2019-01-16 14:30:51

标签: kdb

说我有一张桌子

tbl:([]a:`XXY`XXZ`XZZ`XYZ)

q)tbl
a  
---
XXY
XXZ
XZZ
XYZ

我想选择“ XX ”或“ ZZ ”等行

是否有比编写更紧凑的方法

select from tbl where (a like "*XX*")|(a like "*ZZ*")

理想情况下,我想将我的所有或选项存储在变量中,然后将其传递给选择。

我尝试过使用功能选择,但是只能使其适用于单个或仅以下形式。

q)c:(like;`a;enlist "*XX*")
::
q)?[tbl;enlist c;0b;()]
a  
---
XXY
XXZ

代替在c中设置“ XX ”,我可以创建表或列表,然后将其传递给c吗?

谢谢

2 个答案:

答案 0 :(得分:5)

最常见的方法是

q)select from tbl where any a like/:("*XX*";"*ZZ*")
a
---
XXY
XXZ
XZZ

答案 1 :(得分:0)

扩展到@terrylynch答案 您还可以将变量传递给like语句。正如Terry所提到的,您始终可以使用副词来扩展模式匹配或使用lambda并使用副词遍历list变量。在这种情况下,使用/:直接方法

q)tbl:([]a:`XXY`XXZ`XZZ`XYZ)
q)tbl
a
---
XXY
XXZ
XZZ
XYZ
q)pattern:("*XX*";"*ZZ*")
q)select from tbl where any a like/:pattern
a
---
XXY
XXZ
XZZ
q)select from tbl where any {x like y}[a;] each pattern
a
---
XXY
XXZ
XZZ
相关问题