SQL Server中如何生成2023/01/24 15:21:54.967981100格式的时间?
解决方案:在SQL Server生成带9位小数的时间格式
要得到2023/01/24 15:21:54.967981100这种格式,需要注意两个关键点:SQL Server的时间精度限制,以及字符串拼接的正确方式。
核心说明
SQL Server中,datetime类型仅支持3位毫秒精度,datetime2类型最多支持7位。你要的9位小数,最后两位只能通过字符串补零实现,因为数据库本身不存储9位精度的时间值。
方法一:使用FORMAT函数(SQL Server 2012+)
FORMAT函数可以直接指定自定义格式,写法最简洁:
-- 如果modon是datetime类型,先转成datetime2(7)保留最大精度 SELECT FORMAT(CAST(modon AS datetime2(7)), 'yyyy/MM/dd HH:mm:ss.fffffff00') AS target_format_time
yyyy/MM/dd:生成2023/01/24格式的日期HH:mm:ss.fffffff:生成带7位小数的时间部分- 末尾的
00:补两位零,凑成9位小数
方法二:字符串拼接(兼容更早版本)
如果无法使用FORMAT,可以通过字符串拼接实现:
SELECT CONCAT( -- 生成日期部分:2023/01/24 CONVERT(varchar(10), modon, 111), ' ', -- 生成带7位小数的时间部分:15:21:54.9679811 CONVERT(varchar(12), CAST(modon AS datetime2(7)), 121), -- 补两位零到9位 '00' ) AS target_format_time
你原代码的问题分析
之前代码得到2023/01/24 15:21:54.000,原因有两个:
modon是datetime类型,仅支持3位毫秒精度,所以小数部分只能显示.000SUBSTRING(CONVERT(varchar(23), modon, 121), 11, 13)会取出带前置空格的时间(比如15:21:54.000),导致日期和时间之间出现两个空格
内容的提问来源于stack exchange,提问作者Goutham mano
相关产品推荐
相关产品推荐

