LOG: примеры (SQL)

Использование функции LOG в SQL Server на практике
Раздел: Математические функции, Математические
LOG(float_expression): float

Функция LOG в MS SQL Server

Функция LOG возвращает натуральный логарифм указанного числового выражения или логарифм по заданному основанию. Она применяется в математических вычислениях, финансовом анализе, статистике и научных расчетах, где требуется логарифмическое преобразование данных.

Синтаксис функции: LOG ( number [, base ] )

  • number: Числовое выражение, большее 0. Это обязательный аргумент, для которого вычисляется логарифм.
  • base: Необязательный числовой аргумент, задающий основание логарифма. Должен быть больше 0 и не равен 1. Если аргумент опущен, функция возвращает натуральный логарифм (с основанием e ≈ 2.71828).

Тип возвращаемого значения соответствует типу аргумента number (float). Если любой из аргументов NULL, функция также возвращает NULL.

Простые примеры использования LOG

Вычисление натурального логарифма.

SELECT LOG(10) AS NaturalLog;
NaturalLog
2.3025850929940459

Вычисление десятичного логарифма (по основанию 10).

SELECT LOG(100, 10) AS LogBase10;
LogBase10
2.0

Вычисление логарифма по произвольному основанию.

SELECT LOG(8, 2) AS LogBase2;
LogBase2
3.0

Похожие функции в MS SQL

  • LOG10: Возвращает десятичный логарифм (логарифм по основанию 10) числа. Является частным случаем LOG. SELECT LOG10(1000) -- Результат: 3.0. Используется для удобства вместо LOG с явным указанием основания 10.
  • EXP: Обратная к натуральному логарифму функция. Возвращает значение e (основание натурального логарифма) в указанной степени. SELECT EXP(1) -- Результат: 2.7182818284590451.
  • POWER: Может использоваться для проверки результатов логарифмирования, так как возводит число в степень. SELECT POWER(10, LOG10(5)) -- Результат: 5.0.

Распространенные ошибки

Передача аргумента number меньше или равного 0 приводит к ошибке домена.

SELECT LOG(0);
Msg 3623, Level 16, State 1...
An invalid floating point operation occurred.

Использование основания base, равного 1 или меньше 0.

SELECT LOG(5, 1);
Msg 3623, Level 16, State 1...
An invalid floating point operation occurred.

Неправильный порядок аргументов. В MS SQL первым всегда идет число, вторым - основание.

-- Неправильно: основание 10, число 100
SELECT LOG(10, 100); -- Это логарифм 100 по основанию 10 (2.0), а не наоборот

Изменения в последних версиях

В MS SQL Server функция LOG не претерпела значительных синтаксических изменений в последних основных версиях (2012, 2014, 2016, 2017, 2019, 2022). Ее поведение и возвращаемые типы данных остаются стабильными.

Основное внимание при работе следует уделять обработке ошибок домена, которая также не менялась.

Расширенные примеры

Использование LOG в вычислениях сложного процента для нахождения периода.

Пример sql
-- Сколько лет потребуется для удвоения суммы при 7% годовых?
DECLARE @rate float = 0.07;
SELECT LOG(2, 1 + @rate) AS YearsToDouble;
-- Формула: log(1+rate)(2) = ln(2)/ln(1+rate)
YearsToDouble
10.244768351058837

Логарифмическое преобразование данных для снижения влияния выбросов.

Пример sql
WITH SalesData AS (
    SELECT 1500.0 AS Sales UNION SELECT 50.0 UNION SELECT 300000.0
)
SELECT Sales,
       LOG(Sales) AS LogTransformedSales
FROM SalesData;
Sales      LogTransformedSales
1500.0     7.3132203870903007
50.0       3.9120230054281460
300000.0   12.611537753638238

Вычисление логарифма в запросе к таблице с проверкой на допустимые значения.

Пример sql
SELECT Value,
       CASE
           WHEN Value > 0 THEN LOG(Value)
           ELSE NULL
       END AS SafeLog
FROM (VALUES (10), (0), (-5), (NULL)) AS T(Value);
Value   SafeLog
10      2.3025850929940459
0       NULL
-5      NULL
NULL    NULL

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

Пример sql
CREATE FUNCTION dbo.CustomLog (@number FLOAT, @base FLOAT)
RETURNS FLOAT
AS
BEGIN
    RETURN LOG(@number) / LOG(@base);
END;
GO
SELECT dbo.CustomLog(125, 5) AS CustomLogResult;
CustomLogResult
3.0

Аналоги функции в других СУБД

MySQL: Функции LN() для натурального логарифма и LOG([base], number) (аргументы можно менять местами).

SELECT LN(2), LOG(10, 100), LOG2(8); -- LOG2 для логарифма по основанию 2
0.6931471805599453, 2, 3

PostgreSQL: Используется LN(number) и LOG([base], number). Синтаксис схож с MS SQL.

SELECT LN(EXP(1)), LOG(100); -- LOG без аргумента base выдает десятичный логарифм
1, 2

Oracle: Функция LN(number) для натурального логарифма и LOG(base, number).

SELECT LN(10), LOG(10, 1000) FROM DUAL;
2.3025850929940459, 3

SQLite: Встроенной функции LOG нет, но ее можно вычислить через изменение формулы логарифма: log(number)/log(base).

SELECT (1.0*log(8)) / (1.0*log(2)) AS Log2Result; -- log() в SQLite - натуральный логарифм
3.0

MS SQL LOG function comments

En
LOG Returns the natural logarithm of the specified float expression