1. Список числових функцій

Як ми говорили вище, для СУБД недостатньо просто зберігати дані певного типу: потрібно ще підтримувати великий набір супершвидких операцій над цими типами.

І, як ти знаєш, усі СУБД підтримують різноманітні числові типи та операції над ними. Сьогодні ти познайомишся із найпопулярнішими з них.

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

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

До речі, з дуже багатьма з них ти знайомий завдяки мові Java, тому, думаю, вони не стануть для тебе сюрпризом. Але почнемо по порядку.

Повний перелік функцій можна знайти за цим посиланням.

2. Арифметичні операції

Тут у принципі нічого несподіваного, ті самі стандартні операції, як і скрізь:

# Приклад
1 +, -, *, / 2+2*2 Додавання, віднімання, множення, ділення (не націло!)
2 % 13 % 5 Залишок від ділення
3 MOD 13 MOD 5 Залишок від ділення
4 DIV 13 DIV 5 Ділення націло

З цікавого: під час розподілу двох цілих чисел вийде дійсне число. Для ділення потрібно використовувати оператор DIV.

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

3. Бітові операції

Над числами 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 бітами).

4. Функції округлення

Для округлення 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), то щоразу будеш отримувати ту саму послідовність випадкових чисел.