如何在单个语句中多次查询kdb表中的同一列?

问题描述 投票:0回答:1

我在kdb中有下表...

p:([]r:("(A|A(A|B|C|D).*)";"A(E|F|G|H|I).*";"A(J|K|L|M).*";"A(N|O|P|Q|R|S).*";"A(T|U|V|W|X|Y|Z).*";"B.*";"(C|C(A|B|C|D|E).*)";"C(F|G|H|I|J|K).*";"C(L|M|N|O|P|Q|R).*";"C(S|T|U|V|W|X|Y|Z).*";"D.*"))
r
----------------------
"(A|A(A|B|C|D).*)"
"A(E|F|G|H|I).*"
"A(J|K|L|M).*"
"A(N|O|P|Q|R|S).*"
"A(T|U|V|W|X|Y|Z).*"
"B.*"
"(C|C(A|B|C|D|E).*)"
"C(F|G|H|I|J|K).*"
"C(L|M|N|O|P|Q|R).*"
"C(S|T|U|V|W|X|Y|Z).*"
"D.*"

和下面的函数,用于分析表的每一行...

getRange:{$[x like "*(*";
  [if[x like "(*"; x2:1#1_x; l:enlist x2; x:-1_(3_x)];
  l,:enlist {(3#x),"-",(-3#x)} ssr[ssr[ssr[x;".";""];")";"]"];"(";"["];
  if[((count l)>1)&(l[1] like "*A-*"); l[1]:ssr[l[1]; "A-";"0-9/A-"]];
  :l];
  :enlist ssr[x;".";""]
  ];
 }

哪个给出这样的输出...

r1:raze getRange'[exec r from p]
q)r1
,"A"
"A[0-9/A-D]*"
"A[E-I]*"
"A[J-M]*"
"A[N-S]*"
"A[T-Z]*"
"B*"
,"C"
"C[0-9/A-E]*"
"C[F-K]*"
"C[L-R]*"
"C[S-Z]*"
"D*"

我正在分析行,以便可以将它们插入到类似于select from t where sym like raze getRange'[exec r from p][0]之类的查询中>

我想做的是将第一个“单个A”与第一个“ A组”组合在一起,并与C组合(因此如下所示)。但是我遇到的问题是,这些结果无法轻松插入查询中...

(,"A";"A[0-9/A-D]*")
,"A[E-I]*"
,"A[J-M]*"
,"A[N-S]*"
,"A[T-Z]*"
,"B*"
(,"C";"C[0-9/A-E]*")
,"C[F-K]*"
,"C[L-R]*"
,"C[S-Z]*"
,"D*"

q中是否有办法可以做到这一点?本质上,select from t where sym like (enlist "A";"A[0-9/A-D]*")

[如果需要任何其他信息,请告诉我。预先谢谢你。

我在kdb中有下表... p:([] r :(“(A | A(A | B | C | D)。*)”;“ A(E | F | G | H | I)。*“;” A(J | K | L | M)。*“;” A(N | O | P | Q | R | S)。*“;” A(T | U | V | W | X | Y | Z)。*“;” B。*“;”(C | C(A | B | C | D | E)。*)“;” C(F | G | H | I | J | K)。*“;” C(L | M | N | O | P | Q | R)....

kdb
1个回答
0
投票

为了匹配多个正则表达式,我们可以执行以下操作

© www.soinside.com 2019 - 2024. All rights reserved.