MySQL
Aritmetica
Ricerca…
Osservazioni
MySQL, sulla maggior parte delle macchine, utilizza l' aritmetica in virgola mobile IEEE 754 a 64 bit per i suoi calcoli.
Nei contesti interi utilizza l'aritmetica intera.
-
RAND()
non è un generatore di numeri casuali perfetto. Viene principalmente utilizzato per generare rapidamente numeri pseudocasuali
Operatori aritmetici
MySQL fornisce i seguenti operatori aritmetici
Operatore | Nome | Esempio |
---|---|---|
+ | aggiunta | SELECT 3+5; -> 8 SELECT 3.5+2.5; -> 6.0 SELECT 3.5+2; -> 5.5 |
- | Sottrazione | SELECT 3-5; -> -2 |
* | Moltiplicazione | SELECT 3 * 5; -> 15 |
/ | Divisione | SELECT 20 / 4; -> 5 SELECT 355 / 113; -> 3.1416 SELECT 10.0 / 0; -> NULL |
DIV | Divisione intera | SELECT 5 DIV 2; -> 2 |
% o 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
Se i numeri nella tua aritmetica sono tutti interi, MySQL usa il tipo di dati intero BIGINT
(firmato a 64 bit) per fare il suo lavoro. Per esempio:
select (1024 * 1024 * 1024 * 1024 *1024 * 1024) + 1
-> 1.152.921.504.606.846.977
e
select (1024 * 1024 * 1024 * 1024 *1024 * 1024 * 1024
-> BIGINT
errore fuori intervallo
DOPPIO
Se alcuni numeri nella tua aritmetica sono frazionari, MySQL utilizza l' aritmetica in virgola mobile IEEE 754 a 64 bit . È necessario prestare attenzione quando si utilizza l'aritmetica in virgola mobile, poiché molti numeri in virgola mobile sono, intrinsecamente, approssimazioni piuttosto che valori esatti .
Costanti matematiche
Pi
Quanto segue riporta il valore di PI
formattato a 6 posizioni decimali. Il valore attuale è buono a DOUBLE
;
SELECT PI(); -> 3.141593
Trigonometria (SIN, COS)
Gli angoli sono in radianti, non in gradi. Tutti i calcoli sono fatti in virgola mobile a 64 bit IEEE 754 . Tutti i calcoli in virgola mobile sono soggetti a piccoli errori, noti come errori di macchina ε (epsilon) , quindi evitare di provare a confrontarli per l'uguaglianza. Non c'è modo di evitare questi errori quando si utilizza il punto mobile; sono integrati nella tecnologia.
Se si utilizzano i valori DECIMAL
nei calcoli trigonometrici, vengono convertiti implicitamente in virgola mobile e quindi nuovamente in decimali.
Seno
Restituisce il seno di un numero X espresso in radianti
SELECT SIN(PI()); -> 1.2246063538224e-16
Coseno
Restituisce il coseno di X quando X è dato in radianti
SELECT COS(PI()); -> -1
Tangente
Restituisce la tangente di un numero X espressa in radianti. Si noti che il risultato è molto vicino allo zero, ma non esattamente zero. Questo è un esempio di macchina ε.
SELECT TAN(PI()); -> -1.2246063538224e-16
Arco Coseno (coseno inverso)
Restituisce l'arcocoseno di X se X è nell'intervallo da -1 to 1
SELECT ACOS(1); -> 0
SELECT ACOS(1.01); -> NULL
Arc Sine (sinusoidale inverso)
Restituisce l'arcoseno di X se X è nell'intervallo da -1 to 1
SELECT ASIN(0.2); -> 0.20135792079033
Arco tangente (tangente inversa)
ATAN(x)
restituisce l'arco tangente di un singolo numero.
SELECT ATAN(2); -> 1.1071487177941
ATAN2(X, Y)
restituisce l'arco tangente delle due variabili X e Y. È simile al calcolo dell'arco tangente di Y / X. Ma è numericamente più robusto: t funziona correttamente quando X è vicino allo zero e i segni di entrambi gli argomenti vengono utilizzati per determinare il quadrante del risultato.
Le migliori pratiche suggeriscono di scrivere le formule per utilizzare ATAN2()
anziché ATAN()
laddove possibile.
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
Cotangente
Restituisce la cotangente di X
SELECT COT(12); -> -1.5726734063977
Conversione
SELECT RADIANS(90) -> 1.5707963267948966
SELECT SIN(RADIANS(90)) -> 1
SELECT DEGREES(1), DEGREES(PI()) -> 57.29577951308232, 180
Arrotondamento (ROUND, FLOOR, CEIL)
Arrotondare un numero decimale a un valore intero
Per valori numerici esatti (ad es. DECIMAL
): se la prima cifra decimale di un numero è 5 o superiore, questa funzione arrotonda un numero al numero intero successivo lontano da zero . Se la cifra decimale è 4 o inferiore, questa funzione arriverà al successivo valore intero più prossimo allo zero .
SELECT ROUND(4.51) -> 5
SELECT ROUND(4.49) -> 4
SELECT ROUND(-4.51) -> -5
Per valori numerici approssimativi (ad es. DOUBLE
): il risultato della funzione ROUND()
dipende dalla libreria C; su molti sistemi, ciò significa che ROUND()
utilizza la regola pari round to the più vicina :
SELECT ROUND(45e-1) -> 4 -- The nearest even value is 4
SELECT ROUND(55e-1) -> 6 -- The nearest even value is 6
Arrotonda un numero
Per arrotondare un numero utilizzare la funzione CEIL()
o CEILING()
SELECT CEIL(1.23) -> 2
SELECT CEILING(4.83) -> 5
Arrotondare un numero
Per arrotondare un numero, utilizzare la funzione FLOOR()
SELECT FLOOR(1.99) -> 1
PAVIMENTO e CEIL vanno verso / fuori da -infinità:
SELECT FLOOR(-1.01), CEIL(-1.01) -> -2 and -1
SELECT FLOOR(-1.99), CEIL(-1.99) -> -2 and -1
Arrotondare un numero decimale in un numero specificato di posizioni decimali.
SELECT ROUND(1234.987, 2) -> 1234.99
SELECT ROUND(1234.987, -2) -> 1200
Si applica anche la discussione verso l'alto e verso il basso e "5".
Alza un numero a una potenza (POW)
Per aumentare un numero x
ad una potenza y
, utilizzare le funzioni POW()
o POWER()
SELECT POW(2,2); => 4
SELECT POW(4,2); => 16
Radice quadrata (SQRT)
Utilizzare la funzione SQRT()
. Se il numero è negativo, verrà restituito NULL
SELECT SQRT(16); -> 4
SELECT SQRT(-3); -> NULL
Numeri casuali (RAND)
Genera un numero casuale
Per generare un numero in virgola mobile pseudocasuale tra 0
e 1
, utilizzare la funzione RAND()
Supponiamo di avere la seguente domanda
SELECT i, RAND() FROM t;
Questo restituirà qualcosa di simile
io | RAND () |
---|---|
1 | ,6191438870682 |
2 | ,93845168309142 |
3 | ,83482678498591 |
Numero casuale in un intervallo
Per generare un numero casuale nell'intervallo a <= n <= b, puoi utilizzare la seguente formula
FLOOR(a + RAND() * (b - a + 1))
Ad esempio, questo genererà un numero casuale tra 7 e 12
SELECT FLOOR(7 + (RAND() * 6));
Un modo semplice per restituire casualmente le righe in una tabella:
SELECT * FROM tbl ORDER BY RAND();
Questi sono numeri pseudocasuali .
Il generatore di numeri pseudocasuali in MySQL non è crittograficamente sicuro. Cioè, se usi MySQL per generare numeri casuali da usare come segreti, un determinato avversario che sa che hai usato MySQL sarà in grado di indovinare i tuoi segreti più facilmente di quanto tu possa credere.
Valore assoluto e segno (ABS, SIGN)
Restituisce il valore assoluto di un numero
SELECT ABS(2); -> 2
SELECT ABS(-46); -> 46
Il sign
di un numero lo paragona a 0.
Cartello | Risultato | Esempio |
---|---|---|
-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