簡體   English   中英

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

[英]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]

選擇時間格式 (hhmm)

但是格式化為hh:mm不起作用並顯示NULL

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

選擇時間格式 (hh:mm)

如何將其格式化為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

您可能想查看有關日期和日期時間的文檔

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');

它似乎對輸入類型非常挑剔。 這將返回 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM