如何获得KDB/Q的第一天?

Ant*_*nko 1 kdb q-lang

我正在寻找有效的功能来获得Q的第一天.喜欢2017.05.10 -> 2017.01.01或者2016.08.19 -> 2016.01.01.

下一个片段有效,但效率不高

{"D"$(string `year$x),".01.01"} .z.d
Run Code Online (Sandbox Code Playgroud)

Ale*_*sky 7

这种计算的一个常见技巧是使用与日期不同的事实,月份非常规律:每年恰好有12个月.因此,为了找到一年中的第一天,我们首先将日期转换为月份类型,然后将其向下舍入为12的倍数并转换回日期类型:

q)f:"d"$12 xbar"m"$
q)f .z.d
2017.01.01
Run Code Online (Sandbox Code Playgroud)

或OP的日期:

q)f 2017.05.10 2016.08.19
2017.01.01 2016.01.01
Run Code Online (Sandbox Code Playgroud)