Преобразование часа в 12-часовой формат после извлечения «часа» с использованием DatePart (час, Datetime) - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть небольшая проблема, которую я пытаюсь решить.В настоящее время у меня есть поле даты и времени в моей базе данных.То, что я делаю, уже извлекает части 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 для преобразования времени в 12-часовой формат следующим образом:

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

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

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

Hour      Minute       PM
2         30           PM

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Попробуйте,

 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)
0 голосов
/ 21 декабря 2018

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

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