Список числовых функций

Как мы говорили выше, для СУБД мало просто хранить данные определенного типа, нужно еще поддерживать обширный набор супербыстрых операций над данными этих типов.

И, как ты знаешь, все СУБД поддерживают разнообразные числовые типы и операции над ними. Сегодня ты познакомишься с самыми популярными из них.

Все числовые функции в MySQL можно условно разделить на 5 групп:

  • Арифметически операции
  • Битовые операции
  • Функции округления
  • Алгебраические функции
  • Тригонометрические функции

Кстати, с очень многими из них ты знаком благодаря языку Java, так что думаю они не станут для тебя сюрпризом. Но начнем по порядку.

Полный список функций можно найти по ссылке.

Арифметические операции

Тут в принципе ничего неожиданного, все те же стандартные операции, как и везде:

# Пример
1 +, -, *, / 2+2*2 Сложение, вычитание, умножение, деление (не нацело!)
2 % 13 % 5 Остаток от деления
3 MOD 13 MOD 5 Остаток от деления
4 DIV 13 DIV 5 Деление нацело

Из интересного: при делении двух целых чисел получится вещественно число. Для деления нацело нужно использовать оператор DIV.

Если ты хочешь получить остаток от деления нацело, то нужно использовать или оператор MOD или % как в языке Java. Примеров приводить не буду, как по мне тут и так все очевидно.

Битовые операции

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

# Пример Примечание
1 & 0b1111 & 0b1000 Побитовый AND
2 | 0b1111 | 0b0001 Битовый OR
3 ^ 0b1111 ^ 0b1111 Битовый XOR
4 ~ ~0b1111 Побитовая инверсия
5 >> 128 >> 5 Битовый сдвиг вправо
6 << 2 << 5 Битовый сдвиг влево
7 BIT_COUNT() BIT_COUNT(255) Возвращает количество бит, которые равны 1

В MySQL до версии 8.0 такие операции можно было выполнять только с типом данных BIGINT, который состоял из 64 бит и был аналогичен типу long в Java. Однако в MySQL 8.0 (который мы и рассматриваем) концепция поменялась. Теперь эти операции можно выполнять над специальными двоичными типами:

  • BINARY
  • VARBINARY
  • А также над типами BLOB (которые представляют из себя массив байт)

Все остальные типы просто приводятся к типу BIGINT и операции выполняются, как и ранее (только над первыми 64 битами).

Функции округления

Для округления в MySQL используются до боли знакомые тебе функции. Список их приведен в таблице ниже:

# Пример Примечание
1 CEIL(), CEILING() CEIL (5.1) = 6 Округляет вещественное число вверх
2 FLOOR() FLOOR (5.9) = 5 Округляет вещественное число вниз
3 ROUND() ROUND(4.1) = 4 Округляет вещественное число до ближайшего целого
4 TRUNCATE() TRUNCATE(4.123, 2) = 4.12 Обрезает число до N знаков после запятой
5 RAND() 0.61914388706828 Возвращает случайное вещественное число в диапазоне от 0 до 1
6 RAND(N) 0.93845168309142 Возвращает случайное вещественное число в диапазоне от 0 до 1. N используется как seed value

Со всеми функциями округления ты знаком еще со времен первого квеста в Java. Интерес тут может представлять только функция TRUNCATE() и RANDOM(N).

Функция TRUNCATE (число, количество) принимает в качестве первого параметра вещественное число, а в качестве второго – количество знаков поле запятой, которое должно оставаться. Число обрезается до нужного количества знаков после запятой.

Что касается функции RAND(N) все немного сложнее. Как ты, наверное, знаешь, компьютер не может генерировать случайные числа. Вместо этого он генерирует так называемую последовательность псевдослучайных чисел. То есть глядя на одно число не понятно – случайное оно или нет, а вот последовательность чисел уже может быть похожей на случайную. Этим и пользуются разработчики, генерируя последовательность чисел, которая очень похожа на случайную.

При этом каждое новое число последовательности генерируется по хитрому правилу на основе предыдущего числа этой последовательности. Поэтому если ты передашь в алгоритм генерации случайных чисел некое стартовое число (его еще называют seed), то каждый раз будешь получать одну и ту же последовательность случайных чисел.

undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0401
Напиши запрос, который из таблицы math выберет разность и сумму полей a и b.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0402
Напиши запрос, который из таблицы math выберет частное и произведение полей a и b.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0403
Напиши запрос, который из таблицы math выберет остаток от деления поля a на поле b.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0404
Напиши запрос, который из таблицы math выберет результат деления нацело поля a на поле b.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0405
Напиши запрос, который из таблицы logic выберет побитовый AND полей a и b.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0406
Напиши запрос, который из таблицы logic выберет побитовый OR полей a и b.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0407
Напиши запрос, который из таблицы logic выберет побитовый XOR полей a и b.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0408
Напиши запрос, который из таблицы logic выберет побитовую инверсию поля a.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0409
Напиши запрос, который из таблицы logic выберет битовый сдвиг поля a вправо на b.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0410
Напиши запрос, который из таблицы logic выберет битовый сдвиг поля a влево на b.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0411
Напиши запрос, который из таблицы logic выберет у значения поля a количество бит, равных 1.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0412
Напиши запрос, который из таблицы math выберет значения полей a и b округленных вверх. Используй оба варианта функции.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0413
Напиши запрос, который из таблицы math выберет значения полей a и b округленных вниз.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0414
Напиши запрос, который из таблицы math выберет значения полей a и b округленных до ближайшего целого.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0415
Напиши запрос, который из таблицы math выберет значение поля a обрезанного до 1 знака после запятой и значение поля b обрезанного до 2 знаков после запятой.
undefined
1
Задача
Модуль 4. Работа с БД, 4 уровень, 1 лекция
Недоступна
task0416
Напиши запрос, который из таблицы math выберет случайное вещественное число в диапазоне от 0 до 1, случайное вещественное число в диапазоне от 0 до 1, используя как seed значение 1, случайное вещественное число в диапазоне от 0 до 1, используя как seed значение поля a.