Преобразование часа в 12-часовой формат после извлечения "часа" с использованием DatePart(час,Datetime)

У меня есть небольшая проблема, которую я пытаюсь решить. В настоящее время у меня есть поле даты и времени в моей базе данных. То, что я делаю, уже извлекает части HOUR, Minute и AM/PM из даты, так как я должен заполнить каждое значение в отдельном поле.

Вот как выглядит запрос:

Select 'Hour'=(SELECT DATEPART(HOUR, Date1)), 
'Minute'=(SELECT DATEPART(MINUTE, Date1)), 
'PM'= (CASE WHEN DATEPART(HOUR, Date1) > 11 THEN 'PM' ELSE 'AM' END)
from tblA

Так что здесь я могу иметь 3 значения. Однако проблема, которую я имею, является частью ЧАСА, по умолчанию отображается в 24-часовом формате. Есть ли способ конвертировать его в 12-часовой формат?

Я знаю, что я могу использовать формат = 100, чтобы преобразовать время в формат 12HR следующим образом:

select convert(varchar(20),GetDate(),100)

Однако, когда я применяю это только к значению "ЧАС", это не меняет формат. Есть ли другой способ сделать это?

Чтобы уточнить, если значение datetime в моей таблице: 2018-11-22 14:30:00.000Я надеюсь получить результат, который выглядит следующим образом:

Hour      Minute       PM
2         30           PM

2 ответа

Решение

Вы можете использовать оператор по модулю.

CASE
  WHEN DATEPART(HOUR, Date1) % 12 = 0 THEN
    12
  ELSE
    DATEPART(HOUR, Date1) % 12
END

Попробуй это,

 Declare

    @Date1 dateTime;
    Set @Date1 ='2018-11-22 14:30:00.000';

     Select 'Hour'= Case When (SELECT DATEPART(HOUR, @Date1)) >12 Then (SELECT DATEPART(HOUR, @Date1))-12 Else (SELECT DATEPART(HOUR, @Date1)) End, 
    'Minute'=(SELECT DATEPART(MINUTE, @Date1)), 
    'PM'= (CASE WHEN DATEPART(HOUR, @Date1) > 11 THEN 'PM' ELSE 'AM' END)
Другие вопросы по тегам