У меня есть таблица в SQL Server 2012, которая заполняется данными perfmon Windows с использованием встроенных процессов Windows. Таблица автоматически создается этим процессом. Проблема в том, что поле метки времени char
, но мне нужно datetime
.
Я использую представление сгенерированных таблиц, чтобы получить данные в удобной форме, и я хочу преобразовать отметку времени в дату и время в представлении. По какой-то причине все, что я пробую, дает мне эту ошибку:
Ошибка преобразования при преобразовании даты и / или времени из символьной строки.
Я могу скопировать и вставить значение временной метки из таблицы в запрос на конвертацию, и это работает так:
SELECT convert(datetime, '2018-04-04 00:00:08.022', 121);
или
SELECT cast('2018-04-04 00:00:08.022' as datetime)
Но когда я пытаюсь преобразовать значение непосредственно из таблицы, я получаю ошибку:
SELECT convert(datetime, counterDateTime, 121) from counterData
Я исключил какой-то странный формат в строке, выбрав определенную строку с известным правильным форматом, но я все еще получаю ту же ошибку.
Чего мне не хватает?
EDIT
Просто повторюсь, все значения в таблице в одном и том же формате. Таблица была создана автоматически процессом Windows, который записывает данные perfmon в базу данных. Я не имею никакого контроля над форматом данных в таблице. Это не относится только к строке, которую я тестирую, это относится ко всем строкам.
Пример:
select counterDateTime from counterData where recordindex = '82331' and counterID = '1'
= 2018-04-04 00:00:08.022
select cast('2018-04-04 00:00:08.022' as datetime)
= 2018-04-04 00:00:08.023
select convert(datetime, '2018-04-04 00:00:08.022', 121)
= 2018-04-04 00:00:08.023
select cast(counterDateTime as datetime) from CounterData where recordIndex = '82331' and counterID = '1'
= Msg 241, Level 16, State 1, Line 109
Conversion failed when converting date and/or time from character string.
Вот пример учебного пособия по получению данных счетчика Windows в базу данных. Это довольно стандартный процесс, есть много других примеров в Интернете. Интересными являются таблицы CounterData и CounterDetails, которые я объединяю с представлением. Именно при создании этого представления я хотел бы сделать преобразование.
https://logicalread.com/writing-performance-data-sql-server-mo01/#.WuxgzYgvyzU
Интересующий меня столбец CounterDateTime - это обнуляемый символ длиной 24.