如何去除DATEDIFF计算小时差结果的末尾零值?
解决SQL Server中时长计算结果去末尾零的问题
嘿,我明白你的需求——现在算出的小时差带着一堆多余的末尾零,看着确实不爽,我来给你几个靠谱的解决办法:
方法1:用STR()函数格式化
STR()函数可以帮你指定数字的总长度和小数位数,而且会自动去掉末尾的零,非常适合你的场景:
SELECT STR(DATEDIFF(minute, startDateTime, endDateTime) / 60.0, 10, 1) AS CalculatedDate FROM [dbo].[ATable]
- 参数
10是结果的总长度(包含整数、小数点和小数部分),如果你的时长差整数部分可能更长,可以调大这个数值; - 参数
1是保留的小数位数,刚好匹配你想要的X.X格式。
方法2:用FORMAT()函数实现更灵活的格式
如果你希望整数时长(比如刚好10小时)显示成10而不是10.0,那FORMAT()函数更合适,它支持自定义格式字符串:
SELECT FORMAT(DATEDIFF(minute, startDateTime, endDateTime) / 60.0, '#.#') AS CalculatedDate FROM [dbo].[ATable]
这里的#.#表示:整数部分显示所有有效数字,小数部分最多保留1位,没有小数的话就自动去掉小数点和零。
为什么之前的ROUND/CAST没生效?
你之前尝试的ROUND其实只是做四舍五入操作,不会去掉末尾的零;而CAST如果只指定DECIMAL(10,1),虽然会保留一位小数,但整数时长会显示成10.0,不符合你要的纯整数格式。上面的两个方法刚好能补上这个缺口~
内容的提问来源于stack exchange,提问作者CHAS5427
相关产品推荐
相关产品推荐

