将varchar转换为decimal会删除数字

时间:2013-08-18 22:35:38

标签: sql sql-server casting sql-server-2008-r2 user-defined-functions

我创建了一个SQL Server函数,它将varchar转换为小数,但它删除了数字,然后返回一个整数。

Create FUNCTION [dbo].[ToMoney]
(
@Amount nvarchar
)
RETURNS decimal(14,2)
AS
BEGIN
-- Declare the return variable here
DECLARE @finalAmount as decimal(14,2);          

IF Isnumeric(isnull(@amount, 0)) = 1
    SET @finalAmount = CAST(@amount as decimal(14,2))
ELSE
    SET @finalAmount = 0

-- Return the result of the function
RETURN @finalAmount;
END

当我运行以下查询时:

SELECT dbo.ToMoney('123.45') as result

结果是' 1.00'

我希望它以小数形式返回123.45。我做错了什么?

1 个答案:

答案 0 :(得分:3)

问题是你的功能定义。使用没有长度的nvarchar()通常默认的长度为1

试试这个:

Create FUNCTION [dbo].[ToMoney]
(
@Amount nvarchar(255)
)
RETURNS decimal(14,2)

作为注释:当它默认为1的长度时,它将取出字符串中的第一个字符。这就是为什么你得到1.00的值。