在 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
我在选择以下时间跨度时遇到问题:
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