为什么这个函数不返回十进制?

时间:2010-07-11 20:35:14

标签: sql-server

我希望此函数采用日期时间并返回以小数表示的时间。例如。 - 下午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)

2 个答案:

答案 0 :(得分:12)

确实返回decimal - 但由于您没有指定精度和比例,因此默认为0(小数点后的位数)为0。 ....所以你得到一个小数点后没有任何数字的小数......(所以它将被舍入,看起来它可能看起来不是真正的小数 - 它是)。

您需要将decimal的所有定义更改为确实包含比例的内容!像decimal(18,4)或其他东西。

decimal(18,4)的定义意味着:

  • 共18位数字
  • 其中4位数位于小数点后面(因此在此之前为14位)

默认值 - 如果您未指定任何其他内容 - 是decimal = decimal(18,0)

答案 1 :(得分:2)

尝试按如下方式更改声明:

DECLARE @hour decimal(4,2)
DECLARE @min decimal(4,2)
DECLARE @result decimal(4,2)