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

Sådan undgår du at dividere med nul i MySQL

Problem:

Du vil gerne undgå division-ved-nul-fejlen.

Eksempel:

Vores database har en tabel ved navn numbers med data i kolonnerne id , number_a og number_b .

id nummer_a nummer_b
1 4 0
2 57 -5
3 -7 56
4 -67 0
5 23 55
6 -8 -4

Lad os dividere number_a efter number_b og vis tabellen med en ny kolonne, divided , med resultatet af delingen.

Løsning 1:

SELECT
	*,
	number_a / NULLIF(number_b, 0) AS divided
FROM numbers;

Løsning 2:

SELECT
	*,
	CASE
WHEN number_b = 0
		THEN NULL
		ELSE number_a / number_b
	END AS divided
FROM numbers;

Resultatet er:

id nummer_a nummer_b delt
1 4 0 NULL
2 57 -5 -11.4000
3 -7 56 -0,1250
4 -67 0 NULL
5 23 55 0,4182
6 -8 -4 2.0000

Løsning 3:

SELECT
	*,
	number_a / number_b AS divided
FROM numbers
WHERE number_b != 0;

Resultatet er:

id nummer_a nummer_b delt
2 57 -5 -11.4000
3 -7 56 -0,1250
5 23 55 0,4182
6 -8 -4 2.0000

Diskussion:

Den første løsning bruger NULLIF() funktion, som tager to tal som argumenter. Når det første argument er lig med det andet argument, returnerer funktionen NULL som resultat. Hvis number_b er lig med nul, er divisor NULL , og resultatet af divisionen er NULL .

Den anden løsning bruger CASE udmelding. Hvis betingelsen efter WHEN søgeordet er sandt (i vores tilfælde er betingelsen number_b = 0 ), angiver vi, at NULL returneres. Ellers sker opdelingen som normalt.

Den tredje løsning bruger simpelthen WHERE betingelse for at bortfiltrere rækkerne hvor number_b er nul. Rækkerne med number_b lig med nul mangler i resultatsættet.


  1. FROM_TZ() Funktion i Oracle

  2. (mysql, php) Hvordan får man auto_increment feltværdi før indsættelse af data?

  3. Sådan tilføjer du primær nøglebegrænsning til identitetskolonner til alle tabellerne i SQL Server-databasen - SQL Server / TSQL Selvstudium Del 63

  4. Hvor sikker er tråden EnableWriteAheadLogging i forbindelse med reel brug og SQLite-dokumentation?