FORMAT([Time],'hh:mm')返回NULL

时间:2019-01-16 08:48:54

标签: sql sql-server date time format

我有一个日历表with the following structure

CalendarID    nvarchar(13)
Date          date
Time          time(7)

包含以下数据:

Calendar table data

将时间列格式设置为hhmm可以正常工作:

SELECT [CalendarID]
     , FORMAT([Date], 'ddd, MMM dd, yyyy') AS [DATE]
     , FORMAT([Time], 'hhmm') AS [Time]
FROM [dbo].[Calendar]

select time format (hhmm)

但是格式化为hh:mm无效,并显示NULL

SELECT [CalendarID]
     , FORMAT([Date], 'ddd, MMM dd, yyyy') AS [DATE]
     , FORMAT([Time], 'hh:mm') AS [Time]
FROM [dbo].[Calendar]

select time format (hh:mm)

如何将其格式化为hh:mm

4 个答案:

答案 0 :(得分:1)

以这种方式尝试:

FORMAT([Time], N'hhmm') AS [Time]

FORMAT([Time], N'hh\:mm') AS [Time]

答案 1 :(得分:1)

From the docs

  

FORMAT依赖CLR格式化规则,该规则规定冒号和   时期必须逃脱。因此,当格式字符串(第二   参数)包含一个冒号或句点,该冒号或句点必须为   当输入值(第一个参数)为时,使用反斜杠转义   时间数据类型。

这应该有效:

SELECT FORMAT(CAST('09:00:00.1234567' AS TIME(7)), 'hh\:mm')              -- 09:00
SELECT FORMAT(CAST('09:00:00.1234567' AS TIME(7)), 'hh\:mm\:ss\.fffffff') -- 09:00:00.1234567

答案 2 :(得分:1)

您可能要检查有关日期和日期时间的文档

https://docs.microsoft.com/en-us/sql/t-sql/functions/date-and-time-data-types-and-functions-transact-sql?view=sql-server-2017

在拉努警告之后

更新

通过上面的链接,您可以像这样格式化时间;

SELECT FORMAT(cast(GETDATE() as time), N'hh\:mm\:ss');

答案 3 :(得分:0)

对于输入类型似乎很挑剔。这将返回NULL:

declare @theNow as time
set @theNow = cast(getdate() as time)
print format(@theNow, N'hh\:mm tt')

这将打印您的预期结果字符串:

declare @theNow as datetime
set @theNow = cast(getdate() as datetime)
print format(@theNow, N'hh\:mm tt')

我仍在尝试自己制定细节。