MySQL har en IF()
funktion, der giver en bekvem måde at udføre en simpel "HVIS/ELSE"-handling.
Det fungerer på samme måde som en grundlæggende IF
/ELSE
erklæring, idet den giver os mulighed for at tjekke for en tilstand og returnere et andet resultat afhængigt af, om det er sandt eller ej.
Mere specifikt, hvis det første argument til IF()
funktionen er sand, returneres det andet argument. Hvis det ikke er sandt, returneres det tredje argument.
Syntaks
IF(expr1,expr2,expr3)
Hvis expr1
er TRUE
(
og expr1
<> 0
), expr1
ER IKKE NULLIF()
returnerer expr2
. Ellers returnerer den expr3
.
Returtype
- Hvis
expr2
ellerexpr3
producere en streng, er resultatet en streng. Hvisexpr2
ogexpr3
er begge strenge, og begge strenge skelner mellem store og små bogstaver, resultatet skelner mellem store og små bogstaver. - Hvis
expr2
ellerexpr3
producerer en flydende decimalværdi, er resultatet en flydende decimalværdi. - Hvis
expr2
ellerexpr3
frembringe et heltal, er resultatet et heltal.
Eksempel
Her er et simpelt eksempel for at demonstrere, hvordan det virker:
SELECT IF( 1 > 2, 'Yes', 'No' );
Resultat:
No
Her tjekkede vi, om 1 er større end 2 eller ej. Det er det ikke, og derfor blev det tredje argument returneret.
Her er, hvad der sker, når det første udtryk er sandt:
SELECT IF( 2 > 1, 'Yes', 'No' );
Resultat:
Yes
Databaseeksempel
Her er et eksempel, der bruger IF()
funktion, når du forespørger i en database:
SELECT
Name,
Population,
IF( Population > 10000000, 'Big', 'Small' ) AS "Big/Small"
FROM Country
ORDER BY Name ASC
LIMIT 10;
Resultat:
+---------------------+------------+-----------+ | Name | Population | Big/Small | +---------------------+------------+-----------+ | Afghanistan | 22720000 | Big | | Albania | 3401200 | Small | | Algeria | 31471000 | Big | | American Samoa | 68000 | Small | | Andorra | 78000 | Small | | Angola | 12878000 | Big | | Anguilla | 8000 | Small | | Antarctica | 0 | Small | | Antigua and Barbuda | 68000 | Small | | Argentina | 37032000 | Big | +---------------------+------------+-----------+
Indlejret IF()
Funktioner
Det er muligt at indlejre IF()
fungerer for at give mere end et binært resultat.
For eksempel:
SELECT
Name,
Population,
IF(
Population > 10000000,
IF( Population > 100000000, 'REALLY Big', 'Big' ),
'Small'
) AS "Size"
FROM Country
WHERE Region = 'Southern and Central Asia'
ORDER BY Population DESC;
Resultat:
+--------------+------------+------------+ | Name | Population | Size | +--------------+------------+------------+ | India | 1013662000 | REALLY Big | | Pakistan | 156483000 | REALLY Big | | Bangladesh | 129155000 | REALLY Big | | Iran | 67702000 | Big | | Uzbekistan | 24318000 | Big | | Nepal | 23930000 | Big | | Afghanistan | 22720000 | Big | | Sri Lanka | 18827000 | Big | | Kazakstan | 16223000 | Big | | Tajikistan | 6188000 | Small | | Kyrgyzstan | 4699000 | Small | | Turkmenistan | 4459000 | Small | | Bhutan | 2124000 | Small | | Maldives | 286000 | Small | +--------------+------------+------------+
Nuller og nuller
Hvis det første udtryk enten er NULL
eller 0
, så er den falsk, og den anden værdi returneres:
SELECT
IF( 1, 'True', 'False' ) AS "1",
IF( null, 'True', 'False' ) AS "Null",
IF( 0, 'True', 'False' ) AS "Zero";
Resultat:
+------+-------+-------+ | 1 | Null | Zero | +------+-------+-------+ | True | False | False | +------+-------+-------+
Her er den første kolonne sand, fordi den løses til 1. De to andre kolonner returnerer det andet argument, fordi deres første argument var null
og 0
hhv.
Her er et databaseeksempel:
SELECT
Name,
GNPOld,
IF( GNPOld, GNPOld, 'None' )
FROM Country
ORDER BY Name ASC
LIMIT 10;
Resultat:
+---------------------+-----------+------------------------------+ | Name | GNPOld | IF( GNPOld, GNPOld, 'None' ) | +---------------------+-----------+------------------------------+ | Afghanistan | NULL | None | | Albania | 2500.00 | 2500.00 | | Algeria | 46966.00 | 46966.00 | | American Samoa | NULL | None | | Andorra | NULL | None | | Angola | 7984.00 | 7984.00 | | Anguilla | NULL | None | | Antarctica | NULL | None | | Antigua and Barbuda | 584.00 | 584.00 | | Argentina | 323310.00 | 323310.00 | +---------------------+-----------+------------------------------+
Selvom det samme resultat i dette tilfælde kunne være opnået med lidt mindre kode ved brug af IFNULL()
funktion eller endda COALESCE()
funktion.