0

Я создал функцию SQL Server, которая преобразует varchar в десятичную, но удаляет цифры и возвращает целое число.Преобразование varchar в decimal удаляет цифры

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 как десятичное. Что я делаю не так?

ответ

3

Проблема заключается в определении вашей функции. Использование nvarchar() без длины, как правило, по умолчанию в размере 1.

Попробуйте это:

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

Как примечание: когда он по умолчанию длину 1, она принимает первый символ в строке. Вот почему вы получаете значение 1.00.

+0

Это было сделано! Спасибо. –