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

时间:2018-03-15 23:20:26

标签: 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)

我期待表中的第二条记录:

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

2 个答案:

答案 0 :(得分:2)

时间值10中的10D12:18:23.287989000是否有意?

数据不回来的原因是时间(类型时间跨度)实际上不是午夜以来的纳秒;根据表格,自午夜起 10天加上 nanos

仅根据时间选择数据:

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.sssssssss,其中n是相对于午夜。如果它是0,那么它的当前日期为+/- n days(取决于n是正还是负)。

尝试运行以下内容,它会将两个时间戳之间的差异作为n=10的时间跨度返回。

q)2018.03.25D10:12:00.000000000 - 2018.03.15D10:00:00.000000000   
10D00:12:00.000000000

答案 1 :(得分:2)

虽然您应该修复时间戳(不应该有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