-2

我写了以下查询:

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
4

3 回答 3

0

这有效:

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

我将时间格式化为日期,然后只选择时间。

于 2019-11-07T08:42:14.160 回答
0

我使用了@droebi 的建议:

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

这不是一个完美的解决方案,因为它的开始时间仍然是 09:00 而不是 9:00,但这是我能达到的最接近我想要的时间

于 2019-11-06T12:27:41.273 回答
-2

如果您不关心丢失数据类型,您可以随时选择:

LEFT(CAST(StartAt, AS STRING), 5) 
于 2019-11-06T11:06:28.923 回答