我是KDB / Q Langage的初学者,我正在寻找一种方法将日期对象(或其字符串表示)转换为MM / DD格式。例如,我有2016-09-23,我想将其格式化为09/23。
还有另一个与此主题相关的主题,但我不确定它有多大帮助:How to produce a formatted date string in Q/KDB?
在Q语言中,是否有类似于SQL中 convert(varchar,getdate(),112)的函数?
答案 0 :(得分:4)
Kdb +中不存在这样的转换函数 - 但是您自己使用Kdb中的一些基本字符串操作进行转换 - 例如:
q) show dt:.z.d
2016.09.26
q)"/" sv 1 _ "." vs string dt
"09/26"
有关拆分/加入字符串的更多信息,请参阅vs
(来自标量的向量)和sv
(来自向量的标量)。
上面的代码也使用_
(drop)来删除sting被"分割后的日期的第一部分(年份)。"
答案 1 :(得分:4)
如果您的字符串采用标准格式(即YYYY-MM-DD),则使用索引@深度会更快。
q)list:("2016-09-23";"2016-10-23")
q)5_'.[list;(::;4 7);:;"/"]
"09/23"
"10/23"
答案 2 :(得分:1)
替代方案:
q)"/"0:(" **";"-")0:enlist "2016-09-23"
"09/23"
答案 3 :(得分:0)
对于一个非常大的向量,如果你没有设置使用“/”,这将非常快:
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格式的。
答案 4 :(得分:0)
签出此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"