Функция SQL Server LOG()

В этом руководстве вы узнаете, как использовать функцию SQL Server LOG() для вычисления натурального логарифма числа.

Введение в функцию SQL Server LOG()

Натуральный логарифм — это логарифм по основанию e, где e приблизительно равно 2,718. В SQL-сервере вы можете использовать функцию LOG() для вычисления натурального логарифма указанного числа.

Вот синтаксис функции LOG():

LOG(n [, base])

В этом синтаксисе:

  • n — число с плавающей точкой или значение, которое может быть неявно преобразовано в число с плавающей точкой.
  • base указывает основание логарифма. Это необязательно и по умолчанию равно e.

Функция возвращает NULL, если n или base равны NULL.

Примеры функций SQL Server LOG()

Давайте рассмотрим несколько примеров использования функции LOG().

1) Примеры базовых функций SQL Server LOG()

В следующем примере функция LOG() используется для вычисления натурального логарифма числа 1:

SELECT LOG(1);

Выход:

result
------
0
(1 row affected)

В следующем операторе функция LOG() используется для вычисления натурального логарифма числа e:

SELECT LOG(EXP(1)) result;

Выход:

result
-------
1

В следующем примере вычисляется натуральный логарифм числа 10:

SELECT LOG(10) result;

Выход:

result
----------------
2.30258509299405

В следующем примере функция LOG() используется для вычисления логарифма 8 по основанию 3:

SELECT LOG(8,2) result;

Выход:

result
------
3

2) Использование функции LOG() для расчета сложных процентов

Предположим, у вас есть начальное значение P, годовая процентная ставка составляет r% в год, через n лет вы получите сумму F.

  • Через год вы получите F = P(1 + r)
  • Через два года вы получите F = P(1+ r)(1+r) = P(1+ r)2
  • Через n лет вы получите F = P(1 + r)n

Если у вас есть 1000 долларов США, годовая процентная ставка составит 5%, а если вы хотите получить 2000, вам придется ждать n лет, где n равно: n = log(F/P) / log(1 +r) = log(1,5)/log(1,05) ~ 8,31 года.

В SQL-сервере для этого можно использовать функцию LOG:

DECLARE @p decimal = 1000;
DECLARE @f decimal = 1500;
DECLARE @r decimal = 5; 
DECLARE @n decimal(5,2);
SET @n = LOG(@f/@p)/ LOG(1 + @r/100);
SELECT @n years;

Выход:

years
------
8.31

3) Использование функции LOG() с табличными данными

Сначала создайте новую таблицу под названием «Инвестиции» для хранения текущей стоимости, будущей стоимости и средней годовой процентной ставки:

CREATE TABLE investments(
    id INT IDENTITY PRIMARY KEY,
    present_value DECIMAL(19, 2) NOT NULL,
    future_value DECIMAL(19, 2) NOT NULL,
    annual_interest_rate DECIMAL(19, 2) NOT NULL
);

Во-вторых, вставьте несколько строк в таблицу инвестиций:

INSERT INTO
  investments(present_value, future_value, annual_interest_rate)
VALUES
 (1000, 1500, 0.05),
 (2000, 5000, 0.06),
 (5000, 10000, 0.1);

В-третьих, извлеките данные из таблицы инвестиций:

SELECT * FROM investments;

Наконец, рассчитайте количество лет, которое потребуется, чтобы получить будущую стоимость из текущей стоимости и годовой процентной ставки:

SELECT
  id,
  present_value,
  future_value,
  annual_interest_rate,
  CAST(
    ROUND(
      LOG(future_value / present_value) / LOG(1 + annual_interest_rate),
      2
    ) AS DEC(5, 2)
  ) years
FROM
  investments;

Выход:

id | present_value | future_value | annual_interest_rate | years
---+---------------+--------------+----------------------+-------
1  | 1000.00       | 1500.00      | 0.05                 | 8.31
2  | 2000.00       | 5000.00      | 0.06                 | 15.73
3  | 5000.00       | 10000.00     | 0.10                 | 7.27
(3 rows)

Краткое содержание

  • Используйте функцию LOG() для вычисления натурального логарифма числа.
Мирослав С.

Автор статей, ИБ-специалист