A numerikus függvények listája
Ahogy fentebb említettük, egy DBMS-nek nem elég, ha egyszerűen csak tárol egy bizonyos típusú adatokat, hanem az ilyen típusú adatokkal végzett szupergyors műveletek széles készletét is támogatnia kell.
És mint tudják, az összes DBMS számos numerikus típust és műveletet támogat rajtuk. Ma megismerkedhet a legnépszerűbbekkel.
A MySQL összes numerikus függvénye feltételesen 5 csoportra osztható:
- Aritmetikai műveletek
- Bitműveletek
- Kerekítési funkciók
- Algebrai függvények
- Trigonometrikus függvények
A Java nyelvnek köszönhetően egyébként sokukat ismered, úgyhogy szerintem nem érnek meglepetést számodra. De kezdjük sorban.
A funkciók teljes listája itt található .
Aritmetikai műveletek
Elvileg nincs semmi váratlan, ugyanazok a szabványos műveletek, mint máshol:
# | Példa | ||
---|---|---|---|
1 | +, -, *, / | 2+2*2 | Összeadás, kivonás, szorzás, osztás (nem tökéletes!) |
2 | % | 13% 5 | A hadosztály maradéka |
3 | MOD | 13MOD5 | A hadosztály maradéka |
4 | DIV | 13 DIV 5 | Osztás egész számmal |
Az érdekességből: két egész szám elosztásánál valós számot kapunk. Egész számmal való osztáshoz a DIV operátort kell használni.
Ha egy osztás maradékát egész számmal szeretné megkapni, akkor vagy a MOD vagy a % operátort kell használnia, mint a Java nyelvben. Nem mondok példákat, mivel számomra itt minden nyilvánvaló.
Bitműveletek
Az SQL-ben bitenkénti műveleteket is végezhet számokkal, hasonlóan a Java-hoz. Bár vannak árnyalatok. Az elérhető bitműveletek listája az alábbi táblázatban látható:
# | Példa | jegyzet | ||
---|---|---|---|---|
1 | & | 0b1111 és 0b1000 | Bitenként ÉS | |
2 | | | 0b1111 | 0b0001 | Bitenkénti VAGY | |
3 | ^ | 0b1111^0b1111 | Bit XOR | |
4 | ~ | ~0b1111 | bitenkénti inverzió | |
5 | >> | 128 >> 5 | Bit eltolás jobbra | |
6 | << | 2 << 5 | Kis eltolás balra | |
7 | BIT_COUNT() | BIT_COUNT(255) | Az 1 bitek számát adja vissza |
A MySQL 8.0-s verziója előtt ilyen műveleteket csak a BIGINT adattípuson lehetett végrehajtani, amely 64 bites volt, és hasonló volt a Java long típusához. A MySQL 8.0-ban azonban (amelyet fontolóra veszünk) a koncepció megváltozott. Most ezeket a műveleteket speciális bináris típusokon lehet végrehajtani:
- BINÁRIS
- VARBINÁRIS
- És a BLOB típusok felett is (amelyek bájtok tömbje)
Az összes többi típust egyszerűen BIGINT típusba konvertálják, és a műveleteket a korábbiak szerint hajtják végre (csak az első 64 biten).
Kerekítési funkciók
A MySQL-ben a kerekítéshez fájdalmasan ismerős funkciókat használnak. Ezek listája az alábbi táblázatban található:
# | Példa | jegyzet | |
---|---|---|---|
1 | MENNYEZET(), MENNYEZET() | CEIL (5.1) = 6 | Felfelé kerekít egy valós számot |
2 | PADLÓ() | EMELET(5,9) = 5 | Lefelé kerekít egy valós számot |
3 | KEREK() | KEREK(4.1) = 4 | Valós számot kerekít a legközelebbi egész számra |
4 | TRUNCATE() | CSONKÍT(4,123;2) = 4,12 | N tizedesjegyre csonkol egy számot |
5 | RAND() | 0,61914388706828 | 0 és 1 közötti véletlenszerű valós számot ad vissza |
6 | RAND(N) | 0,93845168309142 | 0 és 1 közötti véletlenszerű valós számot ad vissza. N értéket használunk kezdőértékként |
Az első Java küldetés óta ismeri az összes kerekítési funkciót. Itt csak a TRUNCATE() és a RANDOM(N) függvények lehetnek érdekesek.
A TRUNCATE (szám, mennyiség) függvény első paramétereként egy valós számot vesz fel, második paraméterének pedig a hátralévő tizedesjegyek számát. A szám a kívánt számú tizedesjegyre lesz levágva.
Ami a RAND(N) függvényt illeti, a dolgok egy kicsit bonyolultabbak. Mint bizonyára tudja, a számítógép nem tud véletlen számokat generálni. Ehelyett egy úgynevezett pszeudo-véletlen számsorozatot generál. Vagyis egy számra nézve nem derül ki, hogy véletlenszerű-e vagy sem, de a számsor már hasonló lehet a véletlenhez. A fejlesztők ezt kihasználják egy olyan számsorozat létrehozásával, amely nagyon hasonlít a véletlenszerűhez.
Ebben az esetben a sorozat minden új száma egy trükkös szabály szerint jön létre a sorozat előző száma alapján . Ezért ha egy bizonyos kezdőszámot (más néven magnak) adunk át a véletlenszám-generáló algoritmusnak, akkor minden alkalommal ugyanazt a véletlenszám-sorozatot kapjuk .