Преобразование строки с продолжительностью времени в другой тип данных - PullRequest
0 голосов
/ 08 мая 2019

Я работаю на сервере sql, и мне был предоставлен файл со столбцом для «Продолжительность», который содержит значения строкового типа продолжительности в формате ЧЧ: ММ: СС.

Пример:

Duration:
00:01:34, 
00:25:20, 
01:01:53

Я пытаюсь выяснить, как преобразовать эти строки в тип данных, который я могу использовать для вычисления таких вещей, как «средняя продолжительность», «общая продолжительность» и т. Д., Которые я, очевидно, не могу запустить на строке.

Я отформатировал все значения одинаково и попытался использовать CAST и CONVERT, чтобы изменить тип данных на время.

Мой запрос начнет выполняться и преобразовать несколько тысяч строк, но затем выдаст ошибку со следующим сообщением об ошибке:

Преобразование не выполнено при преобразовании даты и / или времени из символьной строки.

Попытка CAST:

SELECT CAST(Duration as time)
FROM TABLE

Попытка CONVERT:

SELECT CONVERT(time, Duration)
FROM TABLE

Преобразование начинается с моих файлов, и когда я смотрю на вкладку результатов, результаты выглядят, как и ожидалось, с HH:ММ: формат SS.nnnnnnnn, но затем после нескольких тысяч строк появляются ошибки запроса.

Я просто так поступаю неправильно?Единственное, о чем я могу думать, это, возможно, разбить строку, вычислить продолжительность и сохранить ее в секундах, а затем пересчитать продолжительность после выполнения любых вычислений агрегации.Я надеялся, что есть более простой способ добраться туда.

1 Ответ

2 голосов
/ 08 мая 2019

У вас есть данные, которые не совпадают.Вы можете просто использовать TRY_CAST() или TRY_CONVERT(), если вас не интересуют несоответствия (то есть, если значения, не похожие на значение времени, преобразуются в NULL).

Если вы хотите найти оскорбительные значения:

SELECT Duration
FROM TABLE
WHERE TRY_CAST(Duration as time) IS NULL AND Duration IS NOT NULL
...