Как я могу отформатировать время с 09: 00: 00.0000000 до 9:00 в SQL Server? - PullRequest
0 голосов
/ 06 ноября 2019

Я написал следующий запрос:

SELECT CASE WHEN rpwh.StartDayOfTheWeek = 1 THEN 7
WHEN rpwh.StartDayOfTheWeek = 2 THEN 1 
WHEN rpwh.StartDayOfTheWeek = 3 THEN 2 
WHEN rpwh.StartDayOfTheWeek = 4 THEN 3 
WHEN rpwh.StartDayOfTheWeek = 5 THEN 4 
WHEN rpwh.StartDayOfTheWeek = 6 THEN 5 
WHEN rpwh.StartDayOfTheWeek = 7 THEN 6
END AS StartDayOfTheWeek,
DATENAME(WEEKDAY, rpwh.StartDayOfTheWeek - 2) DayOfTheWeek,
rpwh.StartAt, rpwh.EndAt
FROM ResourceProfileWorkingHours rpwh
JOIN ResourceProfile rp ON rpwh.ResourceProfileId = rp.Id
WHERE rp.Alias = 'Accounts Payable'
ORDER BY StartDayOfTheWeek

, который возвращает:

StartDayOfTheWeek   DayOfTheWeek    StartAt              EndAt
1                   Monday          09:00:00.0000000     17:00:00.0000000
2                   Tuesday         09:00:00.0000000     17:00:00.0000000
3                   Wednesday       09:00:00.0000000     17:00:00.0000000
4                   Thursday        09:00:00.0000000     17:00:00.0000000
5                   Friday          09:00:00.0000000     17:00:00.0000000
6                   Saturday        09:00:00.0000000     17:00:00.0000000
7                   Sunday          09:00:00.0000000     17:00:00.0000000

Мне нужно, чтобы время StartAt было преобразовано в 9:00 и время EndAtдо 17:00Я попытался написать следующую строку, но при запуске я получаю нулевые значения для обоих столбцов. Как я могу это сделать?

FORMAT(rpwh.StartAt,'hh:mm') AS StartTime, FORMAT(rpwh.EndAt, 'hh:mm') AS EndTime

Ответы [ 3 ]

0 голосов
/ 06 ноября 2019

Я использовал то, что предложил @droebi:

SELECT CONVERT (VARCHAR (5), <YourTimeCol>, 108)

Это не было идеальным решением, поскольку у него все еще есть время начала как 09:00 вместо 9:00, но это самое близкое, что я могполучить то, что я хотел

0 голосов
/ 07 ноября 2019

Это работает:

select format(cast(rpwh.StartAt as datetime2), 'hh:mm') as StartTime
    , format(cast(rpwh.EndAt as datetime2), 'hh:mm') as EndTime

Я форматирую время в дату, а затем только выбираю время.

0 голосов
/ 06 ноября 2019

Если вы не заботитесь о потере типа данных, вы всегда можете выбрать:

LEFT(CAST(StartAt, AS STRING), 5) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...