0

我创建了一个 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。我究竟做错了什么?

4

1 回答 1

3

问题是你的函数定义。不带长度的使用nvarchar()通常默认长度为1.

试试这个:

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

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

于 2013-08-18T22:37:48.340 回答