programmera.net -> mysql -> normal för utskrift | info@programmera.net |
Matematiska funktioner
1. Matematiska funktioner 2. Numeriska operatorer 3. Avrundning 4. Plus och minusvärden 5. Jämförelse 6. Talbaser 7. RAND() |
1. Matematiska funktioner
I MySQL finns mängder med matematiska funktioner, endast ett urval beskrivs på denna sida. En mer fullständig lista kan du se på:
http://dev.mysql.com/doc/mysql/en/Mathematical_functions.html .
2. Numeriska operatorer
De numeriska operatorerna är +,-,*,/,% (%=modulus):
MOD(x,y) gör samma sak som "x%y". POW(x,y) beräknar x upphöjt till y.
mysql> SELECT 1+2, 2-3, 3*4, 4/5, 5%6, MOD(5,6), POW(6,3);
+-----+-----+-----+------+------+----------+------------+
| 1+2 | 2-3 | 3*4 | 4/5 | 5%6 | MOD(5,6) | POW(6,3) |
+-----+-----+-----+------+------+----------+------------+
| 3 | -1 | 12 | 0.80 | 5 | 5 | 216.000000 |
+-----+-----+-----+------+------+----------+------------+
1 row in set (0.00 sec)
3. Avrundning
Nedan beskrivs olika funktioner som handlar om avrundning:
Funktion Beskrivning CEILING(x) Returnerar x avrundat uppåt. FLOOR(x) Returnerar x avrundat nedåt. ROUND(x) Returnerar x avrundat till närmaste heltal. TRUNCATE(x,d) Returnerar x trunkerat till d decimaler. FORMAT(x,d) Returnerar x trunkerat till d decimaler (som lättläst sträng).
Nedan ges några exempel på avrundning:
Skillnaden mellan FORMAT() och TRUNCATE() är att FORMAT() returnerar en sträng då TRUNCATE() returnerar ett tal. Format lägger dessutom in kommatecken för varje tusental:
mysql> SELECT CEILING(11.23), FLOOR(11.23), ROUND(11.23);
+----------------+--------------+--------------+
| CEILING(11.23) | FLOOR(11.23) | ROUND(11.23) |
+----------------+--------------+--------------+
| 12 | 11 | 11 |
+----------------+--------------+--------------+
1 row in set (0.00 sec)
mysql> SELECT CEILING(-11.23), FLOOR(-11.23), ROUND(-11.23);
+-----------------+---------------+---------------+
| CEILING(-11.23) | FLOOR(-11.23) | ROUND(-11.23) |
+-----------------+---------------+---------------+
| -11 | -12 | -11 |
+-----------------+---------------+---------------+
1 row in set (0.00 sec)
Man kan se att det första svaret är en sträng på att texten är vänsterställd.
mysql> SELECT FORMAT(12.34567,3), TRUNCATE(12.34567, 3);
+--------------------+-----------------------+
| FORMAT(12.34567,3) | TRUNCATE(12.34567, 3) |
+--------------------+-----------------------+
| 12.346 | 12.345 |
+--------------------+-----------------------+
1 row in set (0.00 sec)
mysql> SELECT FORMAT(123456,3), TRUNCATE(123456,3);
+------------------+--------------------+
| FORMAT(123456,3) | TRUNCATE(123456,3) |
+------------------+--------------------+
| 123,456.000 | 123456.000 |
+------------------+--------------------+
1 row in set (0.00 sec)
4. Plus och minusvärden
De funktioner som sköter plus och minusvärden är:
Funktion Beskrivning ABS(x) Returnerar absolutbeloppet av x. SIGN(x) Returnerar 1 om x är positivt, och -1 om x är negativt.
Ett exempel:
mysql> SELECT ABS(-3.2), ABS(3.2), SIGN(-3.2), SIGN(3.2);
+-----------+----------+------------+-----------+
| ABS(-3.2) | ABS(3.2) | SIGN(-3.2) | SIGN(3.2) |
+-----------+----------+------------+-----------+
| 3.2 | 3.2 | -1 | 1 |
+-----------+----------+------------+-----------+
1 row in set (0.00 sec)
5. Jämförelse
Olika funktioner sköter jämförelse:
Funktion Beskrivning GREATEST(x,y) Returnerar det största värdet av x och y. LEAST(x,y) Returnerar det minsta värdet av x och y. IF(expr,x,y) Returnerar x om expr är sant, annars y. CASE x WHEN expr1 THEN y1 .. END Returnerar y1 om expr1=x.
Nedan ges några exempel:
Nedan testar vi IF-funktionen:
mysql> SELECT LEAST(2, -4), GREATEST(2, -4);
+--------------+-----------------+
| LEAST(2, -4) | GREATEST(2, -4) |
+--------------+-----------------+
| -4 | 2 |
+--------------+-----------------+
1 row in set (0.00 sec)
Med CASE kan man utföra flera flera IF i ett svep. Ett smidigt sätt att använda CASE är som enkel översättare, se exemplet nedan:
mysql> SELECT IF(MOD(5,6)>4, "TRUE","FALSE");
+--------------------------------+
| IF(MOD(5,6)>4, "TRUE","FALSE") |
+--------------------------------+
| TRUE |
+--------------------------------+
1 row in set (0.00 sec)
mysql> SELECT name, department, CASE department
WHEN "Management" THEN "Ledning"
WHEN "Sales" THEN "Försäljning"
WHEN "Development" THEN "Utveckling"
END AS Avdelning
FROM employee;
+--------+-------------+-------------+
| name | department | Avdelning |
+--------+-------------+-------------+
| Magnus | Management | Ledning |
| Lisa | Management | Ledning |
| Jan | Sales | F÷rsõljning |
| Thomas | Sales | F÷rsõljning |
| Marcus | Sales | F÷rsõljning |
| Jurgen | Development | Utveckling |
| Tobbe | Development | Utveckling |
| Olle | Development | Utveckling |
| Sven | Development | Utveckling |
| Jocke | Development | Utveckling |
+--------+-------------+-------------+
10 rows in set (0.00 sec)
6. Talbaser
Med dessa funktioner kan du omforma heltal mellan olika talbaser:
Funktion Beskrivning BIN(x) Returnerar x som binärsträng (bas=2). OCT(x) Returnerar x som en oktal sträng (bas=8). HEX(x) Returnerar x som en hexadecimal sträng (bas=16). CONV(x,y,z) Koverterar talet x från bas y till bas z.
Nedan ges några exempel:
mysql> SELECT BIN(43), OCT(43), HEX(43), CONV(43,10,2), CONV(101011,2,10);
+---------+---------+---------+---------------+-------------------+
| BIN(43) | OCT(43) | HEX(43) | CONV(43,10,2) | CONV(101011,2,10) |
+---------+---------+---------+---------------+-------------------+
| 101011 | 53 | 2B | 101011 | 43 |
+---------+---------+---------+---------------+-------------------+
1 row in set (0.00 sec)
7. RAND()
Med denna funktion slumpas ett flyttal fram mellan 0 och 1.0.
Om du vill kan du använda ett frö, och du får då samma slumptal varje gång du använder samma frö:
mysql> SELECT RAND(), RAND();
+------------------+-------------------+
| RAND() | RAND() |
+------------------+-------------------+
| 0.60996076335196 | 0.069766132225996 |
+------------------+-------------------+
1 row in set (0.00 sec)
mysql> SELECT RAND(4), RAND(4);
+-----------------+-----------------+
| RAND(4) | RAND(4) |
+-----------------+-----------------+
| 0.1559528654031 | 0.1559528654031 |
+-----------------+-----------------+
1 row in set (0.00 sec)