In de meeste gevallen is het samenvoegen van een tekenreeks en een getal in SQL niet anders dan het samenvoegen van twee tekenreeksen.
De meeste DBMS'en voegen de tekenreeks en het nummer samen alsof ze beide tekenreeksen zijn. Dit komt omdat het nummer meestal wordt geconverteerd naar een tekenreeks vóór de aaneenschakeling.
De meeste grote RDBMS'en bieden een CONCAT()
functie voor aaneenschakelingsbewerkingen, evenals een CONCAT_WS()
functie waarmee u een scheidingsteken kunt opgeven waarvoor u de aaneengeschakelde argumenten wilt scheiden.
De meeste grote RDBMS'en bevatten ook een operator voor het samenvoegen van tekenreeksen, waarmee we de operanden kunnen samenvoegen.
De CONCAT()
Functie
De meeste grote RDBMS'en bieden een CONCAT()
functie voor het aaneenschakelen van zijn stringargumenten. Over het algemeen worden niet-tekenreeksargumenten geconverteerd naar een tekenreeks voordat de aaneenschakeling plaatsvindt.
Voorbeeld:
SELECT CONCAT('Player', 456);
Resultaat:
Player456
Als we een spatie tussen de aaneengeschakelde argumenten willen opnemen, kunnen we ofwel een spatie toevoegen aan een van de strings, of een spatie opnemen als een afzonderlijk argument:
SELECT
CONCAT('Player ', 456) AS "Option 1",
CONCAT('Player', ' ', 456) AS "Option 2";
Resultaat:
+------------+------------+ | Option 1 | Option 2 | +------------+------------+ | Player 456 | Player 456 | +------------+------------+
RDBMS'en met een CONCAT()
functies omvatten MySQL, MariaDB, SQL Server, Oracle en PostgreSQL.
SQLite heeft geen CONCAT()
functie. SQLite doet een tekenreeksaaneenschakelingsoperator hebben (zie hieronder).
De CONCAT_WS()
Functie
Een andere manier om een spatie op te nemen is door de CONCAT_WS()
. te gebruiken functie. Met deze functie kunt u een scheidingsteken opgeven dat wordt gebruikt om alle aaneengeschakelde argumenten te scheiden.
Voorbeeld:
SELECT CONCAT_WS(' ', 'Player', 456);
Resultaat:
Player 456
Deze functie kan met name handig zijn als u veel argumenten moet samenvoegen:
SELECT CONCAT_WS(', ', 'Red', 2, 'Green', 456, 'Black');
Resultaat:
Red, 2, Green, 456, Black
In dergelijke gevallen hoeft u het scheidingsteken maar één keer op te geven. In dit voorbeeld heb ik een komma en een spatie opgegeven als scheidingsteken.
RDBMS'en met een CONCAT_WS()
functies omvatten MySQL, MariaDB, SQL Server en PostgreSQL.
SQLite en Oracle hebben geen CONCAT_WS()
functioneren, maar ze doen een tekenreeksaaneenschakelingsoperator hebben (zie hieronder).
De tekenreeksaaneenschakelingsoperator
De meeste RDBMS'en bevatten een tekenreeksaaneenschakelingsoperator die de operanden samenvoegt.
Als je SQLite gebruikt, is dit je enige optie.
Voorbeeld:
SELECT 'Player' || 456;
Resultaat:
Player456
Merk op dat u in MySQL eerst de operator voor pijpaaneenschakeling moet inschakelen.
Hetzelfde geldt voor MariaDB.
SQL-server
Het bovenstaande voorbeeld werkt niet in SQL Server. Gebruik in SQL Server het plusteken (+
) tekenreeksaaneenschakelingsoperator.
Het nummer moet ook worden geconverteerd naar een tekenreeks voordat u probeert samen te voegen:
SELECT 'Player' + CAST(456 AS varchar(3));
Resultaat:
Player456
Dit is wat er gebeurt als ik het probeer zonder eerst het getal naar een tekenreeks te converteren:
SELECT 'Player' + 456;
Resultaat:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Player' to data type int.
SQL Server denkt dat we twee getallen proberen toe te voegen (omdat +
is ook de operator voor optellen) en retourneert daarom een fout, omdat een van de operanden een tekenreeks is.