Извините, но не очень понятно, что вы ищете здесь. Какой тип данных содержит время? Какой тип данных (или формат строки) вы пытаетесь создать? Без них вопрос очень открыт для (неправильной) интерпретации.
С учетом сказанного, некоторые рекомендации, которые могут помочь:
- Преобразование ваших данных (при необходимости) в соответствующий тип данных даты / времени
- SQL 2008 имеет тип данных
Time
. Если вы можете, используйте это для простоты
- Используйте функцию
DATEADD
, если / когда вы добавляете 12 часов к времени запуска. Используйте это, чтобы добавить 12 часов к вашему (конвертированному) времени для данных PM.
Но ... правильно настроить 12:00 AM или PM будет сложно. С одной стороны, 12:00 (то есть полночь) представляется в 24 часа как 00:00, что может или не может быть тем, что вы хотите. Но если вы берете 12:00 вечера и (как указано выше) добавляете 12 часов для «PM», вы получаете полночь, а это не то, что вам нужно. Скорее всего, вам придется сделать что-то хитрое с оператором CASE
. Вот пример, основанный на том, что у меня было до того, как я понял, что не могу завершить запрос:
,dateadd(hh
,case
when SomeTime = '12:00' and AM_PM = 'PM' then 0
when SomeTime = '12:00' and AM_PM = 'AM' then 12
when AM_PM = 'AM' then 0
else 12 -- PM
end
,cast(SomeTime as time))