You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KDB/Q解析OrderID字符串及字段拼接操作咨询

KDB/Q OrderID解析与字段拼接实现方案

前置准备:构造样例测试表

先按照给出的字段和样例数据构造测试表,后续所有操作都基于该表执行:

// 构造业务测试表
trade:([]
    InstanceID:`NG1`NG2`NG1;
    OrderID:("jhbubuy-ClientName1-2022-07-01";"nb8yvce-ClientName2-2022-07-01";"cebciube-ClientName3-2022-07-01");
    Strategy:`VWAP`POV`TWAP;
    Fills:5000 300 1000
)

需求1:拆分OrderID新增ClientName列

OrderID固定以-为分隔符,结构为随机流水号-客户名称-交易日期,拆分后取索引为1的片段(q语言索引从0开始计数)即为客户名称,实现代码如下:

// 逐行拆分OrderID提取客户名,默认存为symbol类型,需字符串格式可去掉开头的`$强转
trade:update ClientName:`$1@/:"-"vs/:OrderID from trade

执行后ClientName列对应值为ClientName1/ClientName2/ClientName3,和要求的格式完全匹配。

需求2:拼接生成InstanceID_OrderID列

按业务通用唯一键规则,拼接格式为InstanceID值_去掉随机流水号的OrderID内容,即拆分OrderID后跳过第一段随机流水,剩余片段用-拼回后,和InstanceID字段用_连接,实现代码如下:

// 逐行拼接生成新字段
trade:update InstanceID_OrderID:`$(string[InstanceID],\:"_",'/:"-"sv/:1_/:"-"vs/:OrderID) from trade

执行结果验证

执行完上述两段代码后查询全表,输出结果如下:

q)trade
InstanceID OrderID                             Strategy Fills ClientName  InstanceID_OrderID                
----------------------------------------------------------------------------------------------------
NG1        "jhbubuy-ClientName1-2022-07-01"   VWAP     5000  ClientName1 NG1_ClientName1-2022-07-01       
NG2        "nb8yvce-ClientName2-2022-07-01"   POV      300   ClientName2 NG2_ClientName2-2022-07-01       
NG1        "cebciube-ClientName3-2022-07-01"  TWAP     1000  ClientName3 NG1_ClientName3-2022-07-01       

代码说明

  • vs/:为逐行按指定分隔符拆分字符串的副词用法,适配表的列操作场景
  • 1_/:为逐行跳过拆分后列表的第一个元素(即随机流水号片段)
  • sv/:为逐行按指定分隔符拼接字符串列表
  • 若实际拼接规则有调整(比如不需要日期段、更换分隔符),直接修改对应索引截取范围和拼接符号即可

内容的提问来源于stack exchange,提问作者Lawrence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 03:01:07