KDB创建微秒时间戳

时间:2017-06-27 02:29:38

标签: kdb

我通过

在KDB中创建了ms精度时间戳
update Ts: Date + Time + MSec from Table

现在我试图用微秒精度做同样的事情。 n似乎是nanosec精确时间类型

n   8   16  00:00:00.000000000  0Nn timespan        Timespan    TimeSpan

所以我试过

select Date + "n"$Time + (1000*USec), Date, Time, USec from Table

但似乎它对待" n"具有毫秒精度,它增加(USEC * 1000)ms而不是ns

2017-07-01T23:59:58.000000  2017-06-23  09:10:02.000    744596

我该怎样才能做到这一点。我也尝试过投入' p'但这会产生类型错误

1 个答案:

答案 0 :(得分:2)

KDB从右到左进行评估。因此在您的示例中,它将1000 * Usec添加到Time作为第一个操作,这导致该值被视为毫秒而不是纳秒。如果将(1000 * USec)移动到施法时间左侧的时间跨度,则会增加纳秒。

q)show Table: ([]Date: .z.D - 1 0; Time: "t"$2?23:59:59; MSec: 2?1000; USec: 2?1000)
Date       Time         MSec USec
---------------------------------
2017.06.26 16:04:52.000 652  635
2017.06.27 13:33:25.000 66   108
q)update ts: Date + (1000*USec) + "n"$Time + MSec from Table
Date       Time         MSec USec ts
---------------------------------------------------------------
2017.06.26 16:04:52.000 652  635  2017.06.26D16:04:52.652635000
2017.06.27 13:33:25.000 66   108  2017.06.27D13:33:25.066108000