如何格式化kdb中的日期列

时间:2018-06-05 07:32:53

标签: date kdb

我是KDB的新手。我有一个KDB表,我正在查询:

select[100] from table_name

现在这个表有一些日期列,其日期以这种格式存储

  

YYYY.MM.DD

我希望查询该表并以特定格式检索日期字段(例如mm / dd / yyyy)。如果这将是任何其他RDBMS表,这就是我将要做的事情:
select to_date(date_field,'mm/dd/yyyy') from table_name 我需要kdb相当于上面的。我已经尽力通过kdb文档,但无法找到任何函数/示例/语法来做到这一点。 提前谢谢!

4 个答案:

答案 0 :(得分:3)

正如安东所说,KDB并没有内置的方式来指定日期格式。但是,您可以单独提取日期的组成部分,并根据需要重新排列。

对于带有日期列的示例表t:

q)t
date
----------
2008.02.04
2015.01.02

q)update o:{"0"^"/"sv'flip -2 -2 4$'string`mm`dd`year$\:x}date from t
date       o
-----------------------
2008.02.04 "02/04/2008"
2015.01.02 "01/02/2015"

在函数内部从右到左:在对结果进行字符串处理之前,我们使用`mm`dd`year $:x提取月,日和年组件。然后我们在每个组件之前使用空字符(-2 -2 4$')填充月份和日期组件,并添加" /"格式化("/"sv'flip)。最后,前导空值用" 0"填充。 ("0"^)。

答案 1 :(得分:0)

我认为KDB没有内置的日期格式化功能。 最可靠的方法是自己格式化日期。 例如

t: ([]date: 10?.z.d);
update dateFormatted: {x: "." vs x; x[1],"/",x[2],"/",x[0]} each string date from t

给出

date       dateFormatted
------------------------
2012.07.21 "07/21/2012"
2001.05.11 "05/11/2001"
2008.04.25 "04/25/2008"
....

或者,更有效的方法是进行相同的格式化

update dateFormatted: "/"sv/:("."vs/:string date)[;1 2 0] from t

答案 2 :(得分:0)

签出此GitHub library进行日期时间格式化。它支持格式化日期和时间的excel方法。尽管它可能不适合格式化大量对象(但如果不同的日期很少,则可以使用键控表和lj进行查找)。

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

q).dtf.format["dd mmmm yyyy"; 2016.09.03]  // another example
"03 September 2016"

答案 3 :(得分:0)

现在 qdate 可用于日期时间解析和转换