Sql server 使用小数的Varchar标量函数只返回int

Sql server 使用小数的Varchar标量函数只返回int,sql-server,tsql,sql-function,Sql Server,Tsql,Sql Function,我的头撞到了这个。如果我执行这个 SELECT CONVERT(varchar, CONVERT(datetime, 0.55), 108); 我得到“13:12:00” 但是,将其放入标量函数中 CREATE FUNCTION [dbo].[t_ExcelToTime] (@Excel decimal (12,8)) RETURNS varchar AS BEGIN DECLARE @Result varchar SELECT @Result = CONVERT(varch

我的头撞到了这个。如果我执行这个

SELECT CONVERT(varchar, CONVERT(datetime, 0.55), 108);
我得到“13:12:00”

但是,将其放入标量函数中

CREATE FUNCTION [dbo].[t_ExcelToTime] (@Excel decimal (12,8))
RETURNS varchar
AS
BEGIN
    DECLARE @Result varchar
    SELECT @Result =  CONVERT(varchar,CONVERT(datetime, @Excel), 108)
    RETURN @Result
END
并称之为

SELECT [dbo].[t_ExcelToTime](0.55);
返回“1”


我在这里做错了什么?

“returns varchar”与“returns varchar(1)”相同。为您的数据类型指定适当的长度。

“returns varchar”与“returns varchar(1)”相同。为数据类型指定适当的长度。

不要声明没有大小的
varchar
DECLARE varchar
DECLARE varchar(1)相同。因此,这就是你得到的返回值;我们毫无保留地返回varchar谢谢你们的回复。有趣的是,CONVERT在内联使用时不需要这个,这让我很困惑,不是它不需要它。不同之处在于,参数的默认大小为1,而内联参数的默认大小为30。这就是为什么指定每个varchar的大小非常重要的原因。我希望t-sql语法在所有情况下都需要大小来避免这种情况。
varchar
在任何地方都不需要长度声明。请阅读:不要声明没有大小的
varchar
DECLARE varchar
DECLARE varchar(1)相同。因此,这就是你得到的返回值;我们毫无保留地返回varchar谢谢你们的回复。有趣的是,CONVERT在内联使用时不需要这个,这让我很困惑,不是它不需要它。不同之处在于,参数的默认大小为1,而内联参数的默认大小为30。这就是为什么指定每个varchar的大小非常重要的原因。我希望t-sql语法在所有情况下都需要大小来避免这种情况。
varchar
在任何地方都不需要长度声明。请阅读:。非常感谢你!。非常感谢你!