Числовой тип данных в SQL

Создание числовых данных в SQL достаточно простое: можно ввести число как литерал, можно получить его из столбца таблицы или сгенерировать его путём вычислений.

При вычислениях можно использовать все стандартные арифметические операции (+, -, *, / и прочие) и изменять приоритеты вычислений с помощью скобок.

MySQL
SELECT 2 * ((22 - 16) / (2 + 1)) AS calc_example;
calc_example
4

Математические функции

Для большинства математических вычислений, таких как получение степени числа или получение квадратного корня, в SQL есть встроенные числовые функции. Вот некоторые примеры данных функций:

Имя функцииОписание
POW(num, power)Вычисляет число в указанной степени
SQRT(num)Вычисляет квадратный корень числа
LOG(base, num)Вычисляет логарифм числа по указанному основанию
EXP(num)Вычисляет enum
SIN(num)Вычисляет синус числа
COS(num)Вычисляет косинус числа
TAN(num)Вычисляет тангенс числа

Список всех числовых функций, их описание и примеры можно посмотреть в справочнике.

Округление чисел

При работе с числами с плавающей точкой не всегда требуется сохранение или отображение чисел с полной точностью. Так, денежные транзакции можно хранить с точностью до 6 знаков после запятой, а отображать до 2, с точностью до копеек.

Для округления числовых данных в SQL предусмотрены следующие 4 функции: CEIL, FLOOR, ROUND, TRUNCATE.

Функции CEIL, FLOOR направлены на то, чтобы округлять число к ближайшему целому числу в большую и в меньшую сторону соответственно.

MySQL
SELECT CEILING(69.69) AS ceiling, FLOOR(69.69) AS floor;
ceilingfloor
7069

Для округления к ближайшему целому числу есть функция ROUND, которая любое число, десятичная часть которого больше или равна 0.5, округляет в большую сторону, иначе в меньшую.

MySQL
SELECT ROUND(69.499), ROUND(69.5), ROUND(69.501);
ROUND(69.499)ROUND(69.5)ROUND(69.501)
697070

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

MySQL
SELECT ROUND(69.7171,1), ROUND(69.7171,2), ROUND(69.7171,3);
ROUND(69.7171,1)ROUND(69.7171,2)ROUND(69.7171,3)
69.769.7269.717

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

MySQL
SELECT ROUND(1691.7,-1), ROUND(1691.7,-2), ROUND(1691.7,-3);
ROUND(1691.7,-1)ROUND(1691.7,-2)ROUND(1691.7,-3)
169017002000

Функция TRUNCATE аналогична функции ROUND, она также способна принимать 2-й необязательный параметр, только вместо округления она просто отбрасывает ненужные цифры.

MySQL
SELECT TRUNCATE(69.7979,1), TRUNCATE(69.7979,2), TRUNCATE(69.7979,3);
TRUNCATE(69.7979,1)TRUNCATE(69.7979,2)TRUNCATE(69.7979,3)
69.769.7969.797

А что вернёт следующее выражение?

MySQL
SELECT TRUNCATE(69.7979, -1);

Работа со знаковыми числами

При работе с числовыми данными, в которых возможно наличие отрицательных значений, могут быть полезными функции SIGN и ABS.

Функция SIGN возвращает значение -1, если число отрицательно, 0, если число нулевое и 1, если число положительное.

MySQL
SELECT SIGN(-69), SIGN(0), SIGN(69);
SIGN(-69)SIGN(0)SIGN(69)
-101

Функция ABS возвращает абсолютное значение числа.

MySQL
SELECT ABS(-69), ABS(0), ABS(69);
ABS(-69)ABS(0)ABS(69)
69069