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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow