Liste over numeriske funksjoner
Som vi sa ovenfor, er det ikke nok for en DBMS å bare lagre data av en bestemt type, den må også støtte et omfattende sett med superraske operasjoner på data av denne typen.
Og, som du vet, støtter alle DBMS-er en rekke numeriske typer og operasjoner på dem. I dag vil du bli kjent med de mest populære av dem.
Alle numeriske funksjoner i MySQL kan betinget deles inn i 5 grupper:
- Aritmetiske operasjoner
- Bitoperasjoner
- Avrundingsfunksjoner
- Algebraiske funksjoner
- Trigonometriske funksjoner
Du er forresten kjent med mange av dem takket være Java-språket, så jeg tror de ikke kommer som en overraskelse på deg. Men la oss starte i rekkefølge.
Hele listen over funksjoner finner du her .
Aritmetiske operasjoner
Det er i prinsippet ingenting uventet, alle de samme standardoperasjonene som andre steder:
# | Eksempel | ||
---|---|---|---|
1 | +, -, *, / | 2+2*2 | Addisjon, subtraksjon, multiplikasjon, divisjon (ikke perfekt!) |
2 | % | 13 % 5 | Resten av divisjonen |
3 | MOD | 13MOD5 | Resten av divisjonen |
4 | DIV | 13 DIV 5 | Divisjon etter heltall |
Fra det interessante: når du deler to heltall, får du et reelt tall. For å dele med heltall må du bruke DIV-operatoren.
Hvis du ønsker å få resten av en divisjon med et heltall, må du bruke enten MOD- eller %-operatoren, som i Java-språket. Jeg vil ikke gi eksempler, da for meg er alt åpenbart her.
Bitoperasjoner
Du kan også utføre bitvise operasjoner på tall i SQL, omtrent som i Java. Selv om det er nyanser. Listen over tilgjengelige bitoperasjoner er presentert i tabellen nedenfor:
# | Eksempel | Merk | ||
---|---|---|---|---|
1 | & | 0b1111 og 0b1000 | Bitvis OG | |
2 | | | 0b1111 | 0b0001 | Bitvis ELLER | |
3 | ^ | 0b1111^0b1111 | Bit XOR | |
4 | ~ | ~0b1111 | bitvis inversjon | |
5 | >> | 128 >> 5 | Bitskift til høyre | |
6 | << | 2 << 5 | Bitskifte til venstre | |
7 | BIT_COUNT() | BIT_COUNT(255) | Returnerer antall biter som er 1 |
Før MySQL versjon 8.0 kunne slike operasjoner bare utføres på datatypen BIGINT, som var 64 biter lang og lignet på Javas lange type. Imidlertid har konseptet endret seg i MySQL 8.0 (som vi vurderer). Nå kan disse operasjonene utføres på spesielle binære typer:
- BINÆR
- VARBINARY
- Og også over BLOB-typer (som er en rekke byte)
Alle andre typer konverteres ganske enkelt til BIGINT-typen og operasjonene utføres som før (bare på de første 64 bitene).
Avrundingsfunksjoner
For avrunding i MySQL brukes funksjoner smertefullt kjent for deg. En liste over dem er gitt i tabellen nedenfor:
# | Eksempel | Merk | |
---|---|---|---|
1 | TAK(), TAK() | CEIL (5.1) = 6 | Avrunder et reelt tall oppover |
2 | GULV() | FLOOR(5,9) = 5 | Avrunder et reelt tall nedover |
3 | RUND() | RUNDE(4.1) = 4 | Avrunder et reelt tall til nærmeste heltall |
4 | TRUNCATE() | TRUNCATE(4.123; 2) = 4.12 | Avkorter et tall til N desimaler |
5 | RAND() | 0,61914388706828 | Returnerer et tilfeldig reelt tall mellom 0 og 1 |
6 | RAND(N) | 0,93845168309142 | Returnerer et tilfeldig reelt tall mellom 0 og 1. N brukes som kimverdi |
Du har vært kjent med alle avrundingsfunksjonene siden det første oppdraget i Java. Bare TRUNCATE() og RANDOM(N) funksjonene kan være av interesse her.
TRUNCATE (tall, mengde) -funksjonen tar som sin første parameter et reelt tall, og som sin andre parameter antall desimaler som skal stå igjen. Tallet trimmes til ønsket antall desimaler.
Når det gjelder RAND(N)-funksjonen, er ting litt mer komplisert. Som du sikkert vet, kan ikke en datamaskin generere tilfeldige tall. I stedet genererer den en såkalt pseudo-tilfeldig tallsekvens. Det vil si at når man ser på ett tall, er det ikke klart om det er tilfeldig eller ikke, men rekkefølgen av tall kan allerede være lik tilfeldig. Utviklere drar nytte av dette ved å generere en tallsekvens som er veldig lik tilfeldig.
I dette tilfellet genereres hvert nytt nummer i sekvensen i henhold til en vanskelig regel basert på det forrige nummeret i denne sekvensen . Derfor, hvis du sender et bestemt startnummer (også kalt et frø) til genereringsalgoritmen for tilfeldige tall, vil du hver gang motta den samme sekvensen av tilfeldige tall .
GO TO FULL VERSION