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

E-M*_*add 5 sql-server

我希望此函数采用日期时间并返回以小数表示的时间.EG - 2:33 PM将返回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
Run Code Online (Sandbox Code Playgroud)

类似的查询产生预期的结果......

SELECT DATEPART(HOUR, getDate()) + (DATEPART(MINUTE, getDate())/60.0)
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 12

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

你需要改变所有的定义,decimal对一些包括规模!喜欢decimal(18,4)什么东西.

decimal(18,4)手段的定义:

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

默认 - 如果你没有指定其他任何东西 - 是 decimal = decimal(18,0)