Я использую SQL Server 12.0.4213.0 и новичок в продвинутых SQL-запросах.SQL Parse Duration String to Seconds
У меня есть столбец с именем nvarchar
длительность, содержащий timespans в одном из двух форматов: 39 Seconds
если продолжительность составляет менее 1 минуты, иначе формат подобен 1 Day 18 Hours 2 Minutes
. Обратите внимание, что каждый день/час/минута/секунда может быть сингулярным или множественным. Также в первом формате, если день равен 0, День будет опущен (то же самое с Часом).
Мне нужно преобразовать продолжительность в целое число, представляющее итоговые секунды. 1 Minute 30 Seconds
должен вернуть 90 и 39 Seconds
должен вернуть 39.
Я думаю, что это может быть выполнено с помощью вложенного оператора CASE. Набор данных очень велик, поэтому я хочу быть уверенным, что я очень эффективно подхожу к этому. Любая помощь будет оценена по достоинству.
Один метода я работал в PowerShell заключается в разделении длительности столбца на символе пробела, цикл через результирующий массив увеличивающегося счетчика на 2, принимает array[counter]
и умножить его на соответствующем значении секунд определяются array[counter+1]
, добавьте продукт на общую сумму секунд.
Должно быть возможно добиться того, что вы хотите, используя строковые функции. Но зачем страдать от такой боли, когда вы можете ее избежать? Храните ваши метки времени как ... timestamps вместо 'nvarchar'. –
@TimBiegeleisen - Я согласен с вами, однако я не являюсь администратором этой БД и строго являюсь потребителем данных. – Zachafer
Что делать, если это всего лишь 2 минуты. Он говорит 0 дней 0 часов 2 минуты? – scsimon