首页 > 解决方案 > FORMAT([Time], 'hh:mm') 返回 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

标签: sqlsql-serverdatetimeformat

解决方案


从文档

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

推荐阅读