[英]FORMAT([Time], 'hh:mm') returns NULL
我有一個具有以下結構的日歷表:
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
?
用這種方式試試:
FORMAT([Time], N'hhmm') AS [Time]
或者
FORMAT([Time], N'hh\:mm') AS [Time]
從文檔:
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
您可能想查看有關日期和日期時間的文檔
在拉努的警告之后
更新:
從上面的鏈接中,您可以像這樣格式化時間;
SELECT FORMAT(cast(GETDATE() as time), N'hh\:mm\:ss');
它似乎對輸入類型非常挑剔。 這將返回 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')
我仍在嘗試自己解決細節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.