Списък на числови функции

Както казахме по-горе, не е достатъчно СУБД просто да съхранява данни от определен тип, тя също трябва да поддържа обширен набор от супер бързи операции върху данни от тези типове.

И Howто знаете, всички СУБД поддържат различни числови типове и операции върху тях. Днес ще се запознаете с най-популярните от тях.

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

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

Между другото, вие сте запознати с много от тях благодарение на езика Java, така че мисля, че няма да са изненада за вас. Но да започнем по ред.

Пълният списък с функции можете да намерите тук .

Аритметични операции

По принцип няма нищо неочаквано, всички същите стандартни операции като другаде:

# Пример
1 +, -, *, / 2+2*2 Събиране, изваждане, умножение, деление (не перфектно!)
2 % 13% 5 Остатък от делението
3 MOD 13MOD5 Остатък от делението
4 DIV 13 РАЗДЕЛ 5 Деление с цяло число

От интересното: при разделяне на две цели числа се получава реално число. За да разделите на цяло число, трябва да използвате оператора DIV.

Ако искате да получите остатъка от деление на цяло число, тогава трябва да използвате оператора MOD or %, Howто е в езика Java. Няма да давам примери, тъй като за мен всичко е очевидно тук.

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

Можете също да извършвате побитови операции с числа в SQL, подобно на Java. Въпреки че има нюанси. Списъкът с налични битови операции е представен в tableта по-долу:

# Пример Забележка
1 и 0b1111 и 0b1000 Побитово И
2 | 0b1111 | 0b0001 Побитово ИЛИ
3 ^ 0b1111^0b1111 Бит XOR
4 ~ ~0b1111 побитова инversion
5 >> 128 >> ​​​​5 Преместване на малко надясно
6 << 2 << 5 Малко изместване наляво
7 BIT_COUNT() BIT_COUNT (255) Връща броя битове, които са 1

Преди MySQL version 8.0 такива операции можеха да се извършват само с типа данни BIGINT, който беше дълъг 64 бита и беше подобен на дългия тип на Java. Въпреки това, в MySQL 8.0 (който обмисляме), концепцията се е променила. Сега тези операции могат да се извършват върху специални двоични типове:

  • ДВОИЧЕН
  • ВАРБИНАРИЯ
  • А също и върху типове BLOB (които са масив от byteове)

Всички други типове просто се преобразуват в типа BIGINT и операциите се изпълняват Howто преди (само върху първите 64 бита).

Функции за закръгляване

За закръгляване в MySQL се използват до болка познати за вас функции. Списък с тях е даден в tableта по-долу:

# Пример Забележка
1 CEIL(), CEILING() CEIL (5.1) = 6 Закръглява реално число нагоре
2 ЕТАЖ() FLOOR(5,9) = 5 Закръглява реално число надолу
3 КРЪГЪЛ() КРЪГ(4,1) = 4 Закръглява реално число до най-близкото цяло число
4 TRUNCATE() TRUNCATE(4.123; 2) = 4.12 Съкращава число до N знака след десетичната запетая
5 РАНД() 0,61914388706828 Връща произволно реално число между 0 и 1
6 RAND(N) 0,93845168309142 Връща произволно реално число между 0 и 1. N се използва като начална стойност

Вие сте запознати с всички функции за закръгляване от първото търсене в Java. Само функциите TRUNCATE() и RANDOM(N) могат да представляват интерес тук.

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

Що се отнася до функцията RAND(N), нещата са малко по-сложни. Както вероятно знаете, компютърът не може да генерира произволни числа. Вместо това, той генерира така наречената псевдослучайна числова последователност. Тоест, гледайки едно число, не е ясно дали е случайно or не, но последователността от числа може вече да е подобна на случайна. Разработчиците се възползват от това, като генерират поредица от числа, която е много подобна на произволна.

В този случай всяко ново число от поредицата се генерира според сложно правило, базирано на предишното число от тази поредица . Следователно, ако предадете определено начално число (наричано също начално число) към алгоритъма за генериране на произволни числа, тогава всеки път ще получавате една и съща последователност от произволни числа .