Conversie

Soms vindt er impliciete conversie van een datatype plaats. Dat houdt in dat het systeem automatisch een datatype omzet. Bij de tabel employees is de kolom bonus bijvoorbeeld van het type VARCHAR (tekst).

 

 

clip0118

 

 

Stel dat je daar toch mee wil rekenen en er 100 bij op wil tellen. Dan wordt automatisch het veld bonus omgezet in een numeriek datatype.

 

SELECT last_name, bonus, bonus + 100

FROM employees

WHERE bonus IS NOT NULL;

 

clip0117

 

 

Ook de functies MIN, MAX, AVG, en SUM werken.

 

SELECT MIN(bonus), MAX(bonus), AVG(bonus), SUM(bonus)

FROM employees;

 

clip0290

 

 

Het is echter niet verstandig om het op impliciete datatype conversie te laten aankomen. Gebruik zo nodig conversiefuncties zoals CAST of CONVERT die hierna behandeld worden, zodat er expliciete conversie plaatsvindt. Het maakt SQL beter leesbaar en robuuster. Maar nog beter is om bij het maken van de database voor numerieke informatie het juiste type te kiezen (bijvoorbeeld INT of DECIMAL) en géén VARCHAR.

 

Het gaat bijvoorbeeld fout als je CONCAT gebruikt in combinatie met AVG voor informatie van het type VARCHAR. De tweede kolom van onderstaande informatie is niet de uitvoer die je graag zou hebben. In de derde kolom is ROUND ervoor gezet en wordt het weer hersteld.

 

SELECT AVG(bonus), CONCAT(AVG(bonus), ' dollar'), CONCAT(ROUND(AVG(bonus)), ' dollar')

FROM employees;

 

clip0291