我希望此函数采用日期时间并返回以小数表示的时间。例如。 - 下午2:33将返回14.55
ALTER FUNCTION [dbo].[GetTimeAsDecimal](
@DateTime as datetime
) RETURNS decimal
AS
BEGIN
DECLARE @hour decimal
DECLARE @min decimal
DECLARE @result decimal
SELECT @hour = DATEPART(HOUR, @DateTime)
SELECT @min = (DATEPART(MINUTE, @DateTime)/60.0)
SELECT @result = @hour + @min
RETURN @result
END
类似的查询产生预期的结果......
SELECT DATEPART(HOUR, getDate()) + (DATEPART(MINUTE, getDate())/60.0)
答案 0 :(得分:12)
确实返回decimal
- 但由于您没有指定精度和比例,因此默认为0(小数点后的位数)为0。 ....所以你得到一个小数点后没有任何数字的小数......(所以它将被舍入,看起来它可能看起来不是真正的小数 - 它是)。
您需要将decimal
的所有定义更改为确实包含比例的内容!像decimal(18,4)
或其他东西。
decimal(18,4)
的定义意味着:
默认值 - 如果您未指定任何其他内容 - 是decimal = decimal(18,0)
答案 1 :(得分:2)
尝试按如下方式更改声明:
DECLARE @hour decimal(4,2)
DECLARE @min decimal(4,2)
DECLARE @result decimal(4,2)