我创建了一个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。我做错了什么?
答案 0 :(得分:3)
问题是你的功能定义。使用没有长度的nvarchar()
通常默认的长度为1
。
试试这个:
Create FUNCTION [dbo].[ToMoney]
(
@Amount nvarchar(255)
)
RETURNS decimal(14,2)
作为注释:当它默认为1的长度时,它将取出字符串中的第一个字符。这就是为什么你得到1.00
的值。