LOG: примеры (SQL)
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 в вычислениях сложного процента для нахождения периода.
-- Сколько лет потребуется для удвоения суммы при 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
Логарифмическое преобразование данных для снижения влияния выбросов.
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
Вычисление логарифма в запросе к таблице с проверкой на допустимые значения.
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
Создание пользовательской функции для логарифма по произвольному основанию через натуральный логарифм.
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