在KDB中选择时间跨度值的问题
选择以下时间跨度时,我面临一个问题:在KDB中选择时间跨度值的问题,kdb,Kdb,选择以下时间跨度时,我面临一个问题: t:([] date:2#.z.d ; time: 10D21:28:47.425287000 10D12:18:23.287989000 ) date time -------------------------------- 2018.03.15 10D21:28:47.425287000 2018.03.15 10D12:18:23.287989000 当我运行下面的查询时,我没有得到第二条记录 sel
t:([] date:2#.z.d ; time: 10D21:28:47.425287000 10D12:18:23.287989000 )
date time
--------------------------------
2018.03.15 10D21:28:47.425287000
2018.03.15 10D12:18:23.287989000
当我运行下面的查询时,我没有得到第二条记录
select from t where time within (12:00;13:00)
我期待着表中的第二条记录:
date time
-------------------------------
2018.03.15 10D12:18:23.287989000
时间值
10D12:18:23.287989000
中的10
是故意的吗
数据无法返回的原因是时间(timespan类型)实际上不是午夜后的纳秒;从表中可以看出,从午夜开始的时间是10天以上
要仅根据时间选择数据,请执行以下操作:
q)select from t where (`time$(`date$0)+time) within (12:00;13:00)
date time
-------------------------------
2018.03.15 10D12:18:23.287989000
尝试从表中添加日期和时间,您将看到10天的转发日期
q)select date+time from t
date
-----------------------------
2018.03.25D21:28:47.425287000
2018.03.25D12:18:23.287989000
时间跨度基本上是nDhh:mm:ss.sss,其中n是相对于午夜的。如果为0,则为当前日期,否则为+/-n天
(取决于n为正还是负)
尝试运行以下命令,它将以n=10
的时间跨度返回两个时间戳之间的差异
q)2018.03.25D10:12:00.000000000 - 2018.03.15D10:00:00.000000000
10D00:12:00.000000000
虽然您应该修复时间戳(不应该有10D),但如果您无法修复上游数据,但您认为时间戳实际上是正确的,那么您可以按如下方式去除10D:
q)update mod[;`long$10D]time from t
date time
-------------------------------
2018.03.16 0D21:28:47.425287000
2018.03.16 0D12:18:23.287989000
10
实际上是无意的,好像我存储的nanos
搞乱了,应该是0D12:18:23.287989000
。谢谢你的解释。