我有一个日历表with the following structure:
CalendarID nvarchar(13)
Date date
Time time(7)
包含以下数据:
将时间列格式设置为hhmm
可以正常工作:
SELECT [CalendarID]
, FORMAT([Date], 'ddd, MMM dd, yyyy') AS [DATE]
, FORMAT([Time], 'hhmm') AS [Time]
FROM [dbo].[Calendar]
但是格式化为hh:mm
无效,并显示NULL
:
SELECT [CalendarID]
, FORMAT([Date], 'ddd, MMM dd, yyyy') AS [DATE]
, FORMAT([Time], 'hh:mm') AS [Time]
FROM [dbo].[Calendar]
如何将其格式化为hh:mm
?
答案 0 :(得分:1)
以这种方式尝试:
FORMAT([Time], N'hhmm') AS [Time]
或
FORMAT([Time], N'hh\:mm') AS [Time]
答案 1 :(得分:1)
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)
您可能要检查有关日期和日期时间的文档
在拉努警告之后
更新:
通过上面的链接,您可以像这样格式化时间;
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')
我仍在尝试自己制定细节。