sql >> Database teknologi >  >> RDS >> Mysql

MySQL IF() Funktion forklaret

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 (expr1 <> 0 og expr1 ER IKKE NULL ), IF() returnerer expr2 . Ellers returnerer den expr3 .

Returtype

  • Hvis expr2 eller expr3 producere en streng, er resultatet en streng. Hvis expr2 og expr3 er begge strenge, og begge strenge skelner mellem store og små bogstaver, resultatet skelner mellem store og små bogstaver.
  • Hvis expr2 eller expr3 producerer en flydende decimalværdi, er resultatet en flydende decimalværdi.
  • Hvis expr2 eller expr3 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.


  1. Arbejder med Salesforce.com i Alpha Anywhere

  2. Bemærk:Konvertering af matrix til streng i

  3. Oracle SQL for at ændre kolonnetype fra nummer til varchar2, mens den indeholder data

  4. Hvordan får man de afgrænsningskoordinater for et amerikansk postnummer?