如何将 Q 语言 (KDB) 中的日期格式化为 MM/DD

How to format a Date in Q language (KDB) to MM/DD

我是 KDB/Q 语言的初学者,我正在寻找一种方法将日期对象(或其字符串表示形式)转换为 MM/DD 格式。例如,我有 2016-09-23,我想将其格式化为 09/23。

还有另一个主题与此主题相关,但我不确定它会有多大帮助:

Q语言中有没有类似于SQL中的convert(varchar, getdate(), 112)之类的函数?

Kdb+ 中不存在这样的转换函数 - 但您可以使用 Kdb 中的一些基本字符串操作自行转换它 - 例如:

q) show dt:.z.d
    2016.09.26
q)"/" sv 1 _ "." vs string dt
    "09/26"

有关拆分/连接字符串的更多信息,请参阅 vs(vector from scalar) and sv(向量中的标量)。

上面的代码还使用 _(drop) 在字符串被“.”分割后删除日期的第一部分(年份)。

如果您的字符串采用标准格式(即 YYYY-MM-DD),使用索引 @depth 会更快。

q)list:("2016-09-23";"2016-10-23") 
q)5_'.[list;(::;4 7);:;"/"]
"09/23" 
"10/23"

备选方案:

q)"/"0:(" **";"-")0:enlist "2016-09-23"
"09/23"

对于非常大的矢量,如果您没有设置为使用“/”,这将非常快:

q)dts:.z.d+til 1000000;
q)string[dts][;8 9 4 5 6]
"29.06"
"30.06"
"01.07"
"02.07"

如果你想要“/”:

"/"^string[dts][;8 9 10 5 6]

题目看错了;这是 DD/MM 格式。

查看此 GitHub library 以了解日期时间格式。它支持 excel 格式化日期和时间的方式。尽管它可能不适合格式化大量对象。

q).dtf.format["mm/dd"; 2016.09.23]  
"09/23"

q).dtf.format["yy/m/d"; 2016.09.03]  // another example
"16/9/3"