как отформатировать столбец даты в kdb - PullRequest
0 голосов
/ 05 июня 2018

Я новичок в KDB.У меня есть таблица KDB, которую я запрашиваю как:

select[100] from table_name

теперь в этой таблице есть несколько столбцов с датами, в которых даты хранятся в этом формате

гггг.мм.дд

Я хочу запросить эту таблицу и получить поля даты в определенном формате (например, мм / дд / гггг).Если бы это была любая другая таблица RDBMS, я бы так и сделал:
select to_date(date_field,'mm/dd/yyyy') from table_name
Мне нужен kdb эквивалент выше.Я старался изо всех сил, чтобы просмотреть документы KDB, но не смог найти какую-либо функцию / пример / синтаксис для этого.Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Как сказал Антон, в 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"^).

0 голосов
/ 30 августа 2018

Проверьте эту библиотеку GitHub для форматирования даты и времени.Он поддерживает отличный способ форматирования даты и времени.Хотя это может не подходить для форматирования очень большого числа объектов (но если различные даты намного меньше, тогда таблица с ключами и 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"
0 голосов
/ 05 июня 2018

Я не думаю, что в 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
...