我正在编写一个函数来选择数据库中以字母"A"开头的所有符号,后跟"B",直到字母"Z".我有一个虚拟表设置3个字符,如下所示...
t:([]symbol:`A`App`B`Bapp`C`Capp; price:104.3 124.3 134.2 103.4 402.7 209.8; ID:1 2 3 4 5 6)
Run Code Online (Sandbox Code Playgroud)
以及从符号看起来像x的表中选择的函数...
fetch:{[x;y]select from x where symbol like y}
Run Code Online (Sandbox Code Playgroud)
然后我为每个字母调用函数并将其复活到一个新表...
fetchedA:h (`fetch; `t; "A*")
fetchedB:h (`fetch; `t; "B*")
fetchedC:h (`fetch; `t; "C*")
Run Code Online (Sandbox Code Playgroud)
新的空表和upsert函数......
newNormData:([]symbol:`$(); price:`float$(); ID:`int$())
newNorm:{[x] `newNormData upsert x}
h (`newNorm; fetchedA)
h (`newNorm; fetchedB)
h (`newNorm; fetchedC)
Run Code Online (Sandbox Code Playgroud)
我不想为每个服务器进行26次函数调用,而是要进行1次调用,遍历字母表中的每个字符.在kdb/q中执行此操作的正确方法是什么?
我相信你在找fetch[t] each .Q.A,'"*".您可以通过运行来执行此操作并将其挂接到新表
h({`newNormData upsert fetch[`t] x;}';.Q.A,'"*")
Run Code Online (Sandbox Code Playgroud)
客户端.
或者,如果您希望插入仅以大写字母开头并按字母顺序排列的符号,则执行起来可能更简单
newNormData:`symbol xasc select from t where symbol like "[A-Z]*"
Run Code Online (Sandbox Code Playgroud)
代替.