Как преобразовать строку даты и времени DB2 в дату Excel - PullRequest
2 голосов
/ 03 октября 2008

Я буду регулярно получать выписку из базы данных DB / 2 с датами и временными отметками, отформатированными так:

2002-01-15-00.00.00.000000
2008-01-05-12.36.05.190000
9999-12-31-24.00.00.000000

Есть ли более простой способ преобразовать это в формат даты Excel, чем разложение на подстроки?

DB2date = DateValue(Left(a, 4) + "/" + Mid(a, 6, 2) + "/" + Mid(a, 9, 2))

спасибо за вашу помощь!

Ответы [ 4 ]

2 голосов
/ 03 октября 2008

Непонятно, говорите ли вы о функциях формул или функциях VBA.

Функции формулы

Не используйте функцию DateValue, которая ожидает строку; используйте функцию Date, которая ожидает числовой год, месяц, день:

=DATE(INT(LEFT(A1,4)),INT(MID(A1,6,2)),INT(MID(A1,9,2)))

при условии, что строка даты как есть в A1.

Функции VBA

Вычисление аналогично приведенному выше, просто используйте вместо него функцию DateSerial :

dt= DateSerial(Int(Left$(dt$, 4), Int(Mid$(dt$, 6, 2)), Int(Mid$(dt$, 9, 2)))
1 голос
/ 03 октября 2008

Если вы хотите включить информацию о времени, вам нужно сделать больше; DateValue сбрасывает его.
TimeValue может оценить время до секунд, поэтому вы можете добавить их:

= DateValue(Mid(a, 1, 10)) + TimeValue(Mid(a, 12, 8))

Но ваши данные выборки представляют другую проблему: они имеют значения времени "00.00.00" и "24.00.00".
Второй включает функцию TimeValue, поэтому вам нужно будет написать код для особого случая.

1 голос
/ 03 октября 2008

в VBA, dateValue() может преобразовать первую часть строки в дату:

? dateValue("2002-01-15")

    15/01/2002

Так что правильным способом получить его для вас будет

? dateValue(left("2002-01-15-00.00.00.000000",10))

Это всегда даст вам правильный ответ, если DB2 всегда даст вам дату "ГГГГ-ММ-ДД". Формат результата (дд / мм / гг, мм-ддд-гггг и т. Д.) Будет зависеть от локальных настроек вашего компьютера / конкретных настроек вашей ячейки.

Если вы хотите извлечь часть времени из вашей строки, есть функция timeValue(), которая в конечном итоге выполнит задание.

1 голос
/ 03 октября 2008

Я уверен, что вы могли бы приготовить что-нибудь с Regex, если вы действительно хотите. Это не будет лучше, хотя, возможно, и хуже.

Если вы простите немного C # (я годами не касался VB, поэтому я больше не знаю вызовов функций), вы также можете сделать:

DB2string = "2002-01-15-00.00.00.000000";
DB2date = DateValue(DB2string.SubString(0, 10).Replace('-', '/'));

Но опять же, вы ничего не получаете. Можете ли вы привести пример, где ваш текущий код сломается?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...