Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помощь в функции  [new]
Hatab
Member

Откуда:
Сообщений: 15
Добрый день, уважаемы форумчане.

Есть вот такой код:

USE [eneca_database15]
GO
/****** Object: UserDefinedFunction [dbo].[eConvertToBLR] Script Date: 08/26/2016 15:44:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[eConvertToBLR] (@Calculation bigint, @Currency nvarchar(3),@Amount real)
RETURNS bigint
AS
BEGIN
DECLARE @AmountBLR bigint;

SET @AmountBLR=CASE @Currency
WHEN 'RUR' THEN ROUND(@Amount*(SELECT RateRUR FROM tblMonthlyVariables WHERE ID=@Calculation),-2)
WHEN 'LTL' THEN ROUND(@Amount*(SELECT RateLTL FROM tblMonthlyVariables WHERE ID=@Calculation),-2)
WHEN 'USD' THEN ROUND(@Amount*(SELECT RateUSD FROM tblMonthlyVariables WHERE ID=@Calculation),-2)
WHEN 'EUR' THEN CONVERT(money,(ROUND(@Amount*(SELECT RateEUR FROM tblMonthlyVariables WHERE ID=@Calculation),-2)),1)
WHEN 'UAH' THEN ROUND(@Amount*(SELECT RateUAH FROM tblMonthlyVariables WHERE ID=@Calculation),-2)
ELSE
ROUND(@Amount,-2)
END
RETURN(@AmountBLR);
END;


На данный момент округление идет вот так: Задано число: 1345,87 на выходе: 1300,00

А мне нужно, чтобы: Задано число 1345,87 на выходе было 1345, 87


Заранее спасибо
26 авг 16, 16:03    [19595043]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в функции  [new]
o-o
Guest
все -2 в ROUND() переделать на 2
-----------
от real тоже лучше избавиться
26 авг 16, 16:09    [19595062]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в функции  [new]
buven
Member

Откуда:
Сообщений: 792
Hatab ,

tblMonthlyVariables - я бы перепроектировал пока не поздно, а то завтра вас попросят добавить еще 10 валют в ту же логику, а вы скажете, что это займет полгода разработки...
26 авг 16, 16:18    [19595106]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в функции  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
А ещё RETURNS bigint, очевидно, не годится. И DECLARE @AmountBLR bigint - тоже. Нужен другой тип. Только не real.
26 авг 16, 16:37    [19595193]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в функции  [new]
aleks2
Guest
Осподи милосердный! Откуда эти халтурщики лезут?

ALTER FUNCTION [dbo].[eConvertToBLR] (@Calculation bigint, @Currency nvarchar(3), @Amount money )
RETURNS money
AS
BEGIN

RETURN( select  round(@Amount * case @Currency
                                    WHEN 'RUR' THEN RateRUR 
                                    WHEN 'LTL' THEN RateLTL 
                                    WHEN 'USD' THEN RateUSD 
                                    WHEN 'EUR' THEN RateEUR 
                                    WHEN 'UAH' THEN RateUAH  
                                    ELSE 1
                                end
                     , 2
                     )
          from tblMonthlyVariables WHERE ID=@Calculation
      );
END;


Хотя проектировщики тоже хороши
26 авг 16, 16:49    [19595260]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в функции  [new]
o-o
Guest
Serg_77m
А ещё RETURNS bigint, очевидно, не годится. И DECLARE @AmountBLR bigint - тоже. Нужен другой тип. Только не real.

действительно,
объявлено, что ф-ция вернет целое,
как же можно тогда хотеть, чтобы вернула с двумя знаками после зпт?
26 авг 16, 16:51    [19595268]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в функции  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4542
o-o
объявлено, что ф-ция вернет целое,
как же можно тогда хотеть, чтобы вернула с двумя знаками после зпт?

Аффтор кой чё умалчивает... @Amount в копейках, не иначе...
26 авг 16, 17:57    [19595651]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в функции  [new]
o-o
Guest
buser
@Amount в копейках,

помноженных на годовую инфляцию, ибо там 1345,87 на входе
26 авг 16, 19:05    [19595919]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в функции  [new]
Hatab
Member

Откуда:
Сообщений: 15
aleks2,
огромное спасибо. Все работает)))))
20 окт 16, 17:01    [19805584]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить