SQL Server 2022中TIME与DATETIME类型格式化行为差异及相关问题咨询
SQL Server 2022中TIME与DATETIME类型格式化行为差异及相关问题咨询
我正在做一个工作项目,一开始打算把时间存储在表的datetimeoffset字段里。但我只关心时间部分,不关心日期,所以本来想用地板日期当占位符。我之前用TIME数据类型时遇到过问题,但现在有人说不会有问题,结果还是出问题了,于是我做了个测试。
我最终需要的格式是h:mmt,比如9:15 AM要显示成9:15a。
我的测试代码如下:
declare @time time = '09:00', @date datetime = getdate(); select FORMAT(@time, 'h:mmt'), FORMAT(@date, 'h:mmt')
测试结果是:datetime变量的输出基本符合我的需求(我只需要再套个转小写的函数),完全没问题。但time变量返回的是null。
要让time变量输出结果,我得去掉格式里的"t",还要用\转义冒号,这样才能得到9:00。
所以我的问题是:
- 为什么SQL Server 2022在格式化
TIME类型时不支持用"t"? - 为什么格式化
TIME类型时必须转义冒号,而DATETIME类型不需要? - SQL Server 2022里有没有其他函数可以对
TIME类型直接生成我想要的格式(h:mmt)?我知道可以用其他方法实现,但希望能有一站式的解决方案。 - 为什么SQL Server 2022对
TIME类型和DATETIME类型的处理差异这么大?
备注:内容来源于stack exchange,提问作者John Roa
相关产品推荐
相关产品推荐

