Как сохранить временную часть значения datetime (SQL Server)?

Вот что я использую для получения строки HH:MM:

CONVERT(varchar(5), time_requested, 108)

Я думаю, что может быть более элегантный способ, возможно даже более эффективный (см. аналогичный вопрос в Как удалить временную часть значения datetime (SQL Server)?).

Требования:

  • конечный результат должен быть легко конвертирован в строку (чтобы можно было связать какое-либо поле time_created с полем, таким как date_created).
  • должны быть охвачены следующие 2 случая: HH:MM и HH:MM:SS.

Ответ 1

Declare @D datetime = GetDate()      -- Data Type could be Time as well

Select CONVERT(varchar(8), @D, 108)  -- for HH:MM:SS  11:27:26
Select CONVERT(varchar(5), @D, 108)  -- for HH:MM     11:27

Не удалось добавить, что если 2012+ вы также можете использовать Format()

Declare @D DateTime = '2016-10-22 13:30:25'

Select Format(@D,'HH:mm')         -- 13:30
Select Format(@D,'hh:mm:ss tt')   -- 01:30:25 PM

Ответ 2

Это слишком долго для комментария.

Ваш метод в порядке. Он создает строковое представление значения.

Вы также можете преобразовать в тип данных time:

select cast(time_requested as time)

Но обратите внимание, что это "формат-меньше" - он содержит часы, минуты, секунды и доли секунд. Таким образом, ваш метод, вероятно, лучший подход.