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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow