MySQL
Aritmetisk
Sök…
Anmärkningar
MySQL använder på de flesta maskiner 64-bitars IEEE 754 flyttalsaritmetik för sina beräkningar.
I heltalssammanhang använder den heltals aritmetik.
-
RAND()
är inte en perfekt slumptalsgenerator. Det används främst för att snabbt generera pseudorandomnummer
Aritmetiska operatörer
MySQL tillhandahåller följande aritmetiska operatörer
Operatör | namn | Exempel |
---|---|---|
+ | Tillägg | SELECT 3+5; -> 8 SELECT 3.5+2.5; -> 6,0 SELECT 3.5+2; -> 5,5 |
- | Subtraktion | SELECT 3-5; -> -2 |
* | Multiplikation | SELECT 3 * 5; -> 15 |
/ | Division | SELECT 20 / 4; -> 5 SELECT 355 / 113; -> 3.1416 SELECT 10.0 / 0; -> NULL |
DIV | Heltalsuppdelning | SELECT 5 DIV 2; -> 2 |
% eller MOD | modulo | SELECT 7 % 3; -> 1 SELECT 15 MOD 4 -> 3 SELECT 15 MOD -4 -> 3 SELECT -15 MOD 4 -> -3 SELECT -15 MOD -4 -> -3 SELECT 3 MOD 2.5 -> 0.5 |
BIGINT
Om siffrorna i din aritmetik är heltal, använder MySQL BIGINT
(signerad 64-bitars) heltaldatatyp för att utföra sitt arbete. Till exempel:
select (1024 * 1024 * 1024 * 1024 *1024 * 1024) + 1
-> 1,152,921,504,606,846,977
och
select (1024 * 1024 * 1024 * 1024 *1024 * 1024 * 1024
-> BIGINT
utanför intervallfel
DUBBEL
Om några siffror i din aritmetik är bråkdelar använder MySQL 64-bitars IEEE 754 flytande punkt aritmetik . Du måste vara försiktig när du använder aritmetik för flytande punkt, eftersom många flyttalsnummer i sig är tillnärmningar snarare än exakta värden .
Matematiska konstanter
Pi
Följande returnerar värdet på PI
formaterat till 6 decimaler. Det verkliga värdet är bra för DOUBLE
;
SELECT PI(); -> 3.141593
Trigonometri (SIN, COS)
Vinklar finns i radianer, inte grader. Alla beräkningar görs i IEEE 754 64-bitars flytande punkt . Alla beräkningar av flytande punkter utsätts för små fel, kända som maskin ε (epsilon) -fel , så undvik att försöka jämföra dem för jämlikhet. Det finns inget sätt att undvika dessa fel när du använder flytande punkt; de är inbyggda i tekniken.
Om du använder DECIMAL
värden i trigonometriska beräkningar konverteras de implicit till flytande punkt och sedan tillbaka till decimal.
Sinus
Returnerar sinusen för ett nummer X uttryckt i radianer
SELECT SIN(PI()); -> 1.2246063538224e-16
Cosinus
Returnerar kosinus av X när X ges i radianer
SELECT COS(PI()); -> -1
Tangent
Returnerar tangenten för ett nummer X uttryckt i radianer. Observera att resultatet är mycket nära noll, men inte exakt noll. Detta är ett exempel på maskin ε.
SELECT TAN(PI()); -> -1.2246063538224e-16
Arc Cosine (invers kosinus)
Returnerar ljusbågens kosinus för X om X är i området -1 to 1
SELECT ACOS(1); -> 0
SELECT ACOS(1.01); -> NULL
Arc Sine (invers sinus)
Returnerar ljusbågens sinus för X om X är i området -1 to 1
SELECT ASIN(0.2); -> 0.20135792079033
Arc Tangent (invers tangent)
ATAN(x)
returnerar bågens tangens för ett enda nummer.
SELECT ATAN(2); -> 1.1071487177941
ATAN2(X, Y)
returnerar bågtangenten för de två variablerna X och Y. Det liknar beräkningen av bågtangenten för Y / X. Men det är numeriskt mer robust: t fungerar korrekt när X är nära noll och tecknen av båda argumenten används för att bestämma kvadranten för resultatet.
Bästa praxis föreslår att du skriver formler för att använda ATAN2()
snarare än ATAN()
där det är möjligt.
ATAN2(1,1); -> 0.7853981633974483 (45 degrees)
ATAN2(1,-1); -> 2.356194490192345 (135 degrees)
ATAN2(0, -1); -> PI (180 degrees) don't try ATAN(-1 / 0)... it won't work
KOTANGENT
Returnerar kotangenten till X
SELECT COT(12); -> -1.5726734063977
Omvandling
SELECT RADIANS(90) -> 1.5707963267948966
SELECT SIN(RADIANS(90)) -> 1
SELECT DEGREES(1), DEGREES(PI()) -> 57.29577951308232, 180
Avrundning (ROUND, FLOOR, CEIL)
Runda ett decimaltal till ett heltal
För exakta numeriska värden (t.ex. DECIMAL
): Om den första decimalplatsen för ett nummer är 5 eller högre kommer denna funktion att runda ett nummer till nästa heltal bort från noll . Om denna decimal är 4 eller lägre kommer denna funktion att avrundas till nästa heltal närmast noll .
SELECT ROUND(4.51) -> 5
SELECT ROUND(4.49) -> 4
SELECT ROUND(-4.51) -> -5
För ungefärliga numeriska värden (t.ex. DOUBLE
): Resultatet av ROUND()
beror på C-biblioteket; på många system betyder detta att ROUND()
använder rundan till närmaste jämna regel:
SELECT ROUND(45e-1) -> 4 -- The nearest even value is 4
SELECT ROUND(55e-1) -> 6 -- The nearest even value is 6
Avrunda ett nummer
För att runda upp ett nummer använder du antingen CEIL()
eller CEILING()
-funktionen
SELECT CEIL(1.23) -> 2
SELECT CEILING(4.83) -> 5
Avrunda ett nummer
För att avrunda ett nummer använder du FLOOR()
-funktionen
SELECT FLOOR(1.99) -> 1
GOLV och CEIL går mot / bort från infinity:
SELECT FLOOR(-1.01), CEIL(-1.01) -> -2 and -1
SELECT FLOOR(-1.99), CEIL(-1.99) -> -2 and -1
Runda ett decimaltal till ett specificerat antal decimaler.
SELECT ROUND(1234.987, 2) -> 1234.99
SELECT ROUND(1234.987, -2) -> 1200
Diskussionen om upp och ner och "5" gäller också.
Höj ett nummer till en effekt (POW)
För att höja ett tal x
till en effekt y
, använd antingen POW()
eller POWER()
-funktionerna
SELECT POW(2,2); => 4
SELECT POW(4,2); => 16
Square Root (SQRT)
Använd SQRT()
-funktionen. Om antalet är negativt kommer NULL
att returneras
SELECT SQRT(16); -> 4
SELECT SQRT(-3); -> NULL
Slumpmässiga siffror (RAND)
Generera ett slumpmässigt antal
Använd RAND()
-funktionen för att skapa ett pseudorandom-flyttalsnummer mellan 0
och 1
Anta att du har följande fråga
SELECT i, RAND() FROM t;
Detta kommer att returnera något liknande
jag | RAND() |
---|---|
1 | ,6191438870682 |
2 | 0,93845168309142 |
3 | 0,83482678498591 |
Slumpmässigt nummer i ett intervall
För att generera ett slumpmässigt nummer i intervallet a <= n <= b, kan du använda följande formel
FLOOR(a + RAND() * (b - a + 1))
Till exempel kommer detta att generera ett slumptal mellan 7 och 12
SELECT FLOOR(7 + (RAND() * 6));
Ett enkelt sätt att slumpmässigt returnera raderna i en tabell:
SELECT * FROM tbl ORDER BY RAND();
Dessa är pseudorandomnummer .
Generatoren för pseudorandomnummer i MySQL är inte kryptografiskt säker. Det vill säga, om du använder MySQL för att generera slumpmässiga nummer som ska användas som hemligheter, kommer en bestämd motståndare som vet att du använde MySQL att kunna gissa dina hemligheter lättare än du kanske tror.
Absolut värde och tecken (ABS, SIGN)
Returnera det absoluta värdet för ett nummer
SELECT ABS(2); -> 2
SELECT ABS(-46); -> 46
sign
på ett nummer jämför det med 0.
Tecken | Resultat | Exempel |
---|---|---|
-1 | n <0 | SELECT SIGN(42); -> 1 |
0 | n = 0 | SELECT SIGN(0); -> 0 |
1 | n> 0 | SELECT SIGN(-3); -> -1 |
SELECT SIGN(-423421); -> -1