在 KDB 中选择时间跨度值的问题

Issue selecting timespan values in 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

当我 运行 以下查询时,我没有取回第二条记录

select from t where time within (12:00;13:00)

我期待 table 的第二条记录:

date       time                
-------------------------------
2018.03.15 10D12:18:23.287989000

时间值10D12:18:23.287989000中的10是故意的吗?

数据没有返回的原因是时间(类型 timespan )实际上不是自午夜以来的纳秒;根据 table 从午夜开始 10 天加上 纳秒

至select数据仅基于时间:

q)select  from t where (`time$(`date[=10=])+time) within (12:00;13:00)
date       time                
-------------------------------
2018.03.15 10D12:18:23.287989000

尝试添加 table 中的日期和时间,您会看到日期转发了 10 天

q)select date+time from t

date                         
-----------------------------
2018.03.25D21:28:47.425287000
2018.03.25D12:18:23.287989000

时间跨度基本上是 nDhh:mm:ss.sssssssss ,其中 n 是相对于午夜的。如果它是 0 那么它是当天,否则它是 +/- n days(取决于 n 是正数还是负数)。

尝试 运行 下面的方法,它会 return 你将两个时间戳之间的差异作为 n=10.

的时间跨度
q)2018.03.25D10:12:00.000000000 - 2018.03.15D10:00:00.000000000   
10D00:12:00.000000000

虽然你应该修复你的时间戳(不应该是 10D)如果你处于无法修复上游数据但你认为时间戳实际上是正确的情况,那么你可以剥离抽走 10D 如下:

q)update mod[;`longD]time from t
date       time
-------------------------------
2018.03.16 0D21:28:47.425287000
2018.03.16 0D12:18:23.287989000