kdb - 在 q/KDB 中将序列号转换为日期并更新到新列
问题描述
数据:包含以下列,而期限序列号应通过向相同数据添加新列转换为日期 YYYY.MM.DD
班级 | RIC | 男高音 | 产品 |
---|---|---|---|
场外交易 | AAAA | “42088” | 债券:债券:Sovin |
场外交易 | 自闭症谱系障碍 | “42095” | 债券:债券:Sovin |
场外交易 | AABP | “5M” | 认证 |
场外交易 | DBSF | “1M” | 认证 |
更改后,它应该看起来像“Bond:Bonds*”这样的产品 - 新列将包含当前在“期限”列中的值,但日期格式不是像“Bond:Bonds*”这样的产品 - 新的 EndDate 列将为空
班级 | RIC | 男高音 | 产品 | 结束日期 |
---|---|---|---|---|
场外交易 | AAAA | “” | 债券:债券:Sovin | 2015.03.26 |
场外交易 | 自闭症谱系障碍 | “” | 债券:债券:Sovin | 2015.01.04 |
场外交易 | AABP | “5M” | 认证 | 0Nd |
场外交易 | DBSF | “1M” | 认证 | 0Nd |
解决方案
Tenor 看起来是基于 excel 的日期,所以我认为您的预期输出是错误的。
kdb 日期从2000.01.01
. 检查excel需要抵消1899.12.30
编辑:您可能需要将确切的偏移量调整到您期望的值,但您知道需要什么
q)update EndDate:1899.12.30+"J"$tenor from t
tenor EndDate
------------------
"42088" 2015.03.25
"42095" 2015.04.01
"5M"
"1M"
编辑:使“债券:债券*”的期限为空:
因为 Tenor 是一个字符串(即嵌套的字符列表),所以您需要创建一个与 where 返回的长度相同的列表。你可以这样做count[i]#enlist ""
q)update Tenor:count[i]#enlist "", EndDate:1899.12.30+"J"$Tenor from t where Product like "Bond:Bonds*"
Class RIC Tenor Product EndDate
--------------------------------------------
OTC AAAA "" Bond:Bonds:Sovin 2015.03.25
OTC ASD "" Bond:Bonds:Sovin 2015.04.01
OTC AABP "5M" Certified
OTC DBSF "1M" Certified
q)
推荐阅读
- angular - 自定义指令 - Angular 2/4/5
- ios - class_replaceMethod 类别方法 return nil
- typeerror - 使用 whois-json 的 Sinon 测试错误
- django - Django HttpResponseRedirect 和 NoReverseMatch
- python-3.x - 检测图像中是否包含所需的对象
- spring-boot - Spring-boot Camel SQL中的ResultSet缓存
- php - FPDF 自动调整单元格大小
- angular - Angular Typescript Generic Class 不会抛出错误
- visual-studio-2017 - 构建时的 NuGet 更新(VS2017 Pro)
- android - 如何在后台使用应用程序在 Android 上进行网络通话