SQL: преобразовать 24-часовое время в 12-часовое. - PullRequest
0 голосов
/ 28 мая 2020

Я создаю отчет SQL, в котором отслеживается время входа и выхода агента. Запрос состоит в том, чтобы добавить порог времени входа в систему, чтобы отслеживать опоздания агентов. Я отделил поле DATETIME, чтобы можно было добавить порог, но теперь я получаю только 24-часовое время вместо 12-часового. Вот мой запрос:

    SELECT Interval = CONVERT(char,AL.LogoutDateTime,101),
   Year = DATEPART(yy, AL.LogoutDateTime),
   Month = DATEPART(mm, AL.LogoutDateTime),
   Day = DATEPART(dd, AL.LogoutDateTime),
   Week = DATEPART(ww, AL.LogoutDateTime),
   DOY = DATEPART(dy, AL.LogoutDateTime),
   DOW = DATEPART(dw, AL.LogoutDateTime),
   A.EnterpriseName as AgentName,
    AL.LogoutDateTime,
    AL.LoginDuration,
    AL.Extension,
    AL.ReasonCode,
    CONVERT(VARCHAR(8), DATEADD(s, -(AL.LoginDuration), AL.LogoutDateTime),101) AS LoginDate,
    CONVERT(VARCHAR(8), DATEADD(s, -(AL.LoginDuration), AL.LogoutDateTime),8) AS LoginTime,
    A.SkillTargetID

    FROM
    Agent_Logout AL
    JOIN Agent A ON AL.SkillTargetID = A.SkillTargetID
    where LogoutDateTime between :start_date and :end_date
    and A.SkillTargetID IN (select SkillTargetID from Agent_Team_Member where AgentTeamID in 
    (:Agent))
    group by LogoutDateTime,
    EnterpriseName,
    LoginDuration,
    Extension,
    ReasonCode,
    A.SkillTargetID,
    DATEPART(yy, AL.LogoutDateTime),
    DATEPART(mm, AL.LogoutDateTime),
    DATEPART(dd, AL.LogoutDateTime),
    DATEPART(ww, AL.LogoutDateTime),
    DATEPART(dy, AL.LogoutDateTime),
    DATEPART(dw, AL.LogoutDateTime),
    CONVERT(char,AL.LogoutDateTime,101)

    order by EnterpriseName

Вот мои результаты:

    Interval    Year    Month   Day Week    DOY DOW AgentName   LogoutDateTime          LoginDuration   Extension   LoginDate   LoginTime   
    05/27/2020  2020    5       27  22      148 4   Jane Doe    2020-05-27 12:43:53.227 7429     1234   05/27/20    14:40:04    

Я знаю, что проблема в поле LoginTime, которое я создаю, но я не могу понять, как преобразовать это обратно в стандартное время. Если я оставлю поле DATETIME, я не смогу установить пороги входа, потому что дата не позволяет порогу работать правильно ... так как я могу разделить поле datetime, сохранив 12-часовое время? Вместо 14:40:04 это будет 2:40:04 pm.

1 Ответ

0 голосов
/ 28 мая 2020

Вместо

CONVERT(VARCHAR(8), DATEADD(s, -(AL.LoginDuration), AL.LogoutDateTime),8) 

используйте

CONVERT(VARCHAR(8), CAST(DATEADD(s, -(AL.LoginDuration), AL.LogoutDateTime) AS TIME),0)

Он преобразует дату и время во время (без части даты), а затем время в стандартный формат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...