In SQL Server kunt u de T-SQL SPACE()
functie om een bepaald aantal spaties te genereren.
Dit kan handig zijn voor het toevoegen van spaties binnen een tekenreeks, bijvoorbeeld bij het aaneenschakelen van twee of meer tekenreeksen.
De manier waarop het werkt, is dat je het aantal spaties opgeeft dat je nodig hebt, en het zal een reeks van precies dat aantal spaties retourneren.
Syntaxis
De syntaxis gaat als volgt:
SPACE ( integer_expression )
Waar integer_expression is een positief geheel getal dat het aantal spaties aangeeft. Als dit een negatieve waarde is, NULL
wordt geretourneerd.
Voorbeeld 1 – Basisgebruik
Hier is een voorbeeld van hoe het werkt:
SELECT SPACE(40) AS Result;
Resultaat:
+------------------------------------------+ | Result | |------------------------------------------| | | +------------------------------------------+
Als het niet duidelijk is, leverde dat 40 plaatsen op.
Voorbeeld 2 – Aaneenschakeling met spaties
Dit voorbeeld laat het effect misschien wat beter zien.
SELECT 'Keep' + SPACE(10) + 'away!' AS Result;
Resultaat:
+---------------------+ | Result | |---------------------| | Keep away! | +---------------------+
Voorbeeld 3 – Negatieve integerwaarde
Het argument moet een positieve waarde zijn. Als het een negatieve waarde is, is het resultaat NULL
:
SELECT SPACE(-10) AS Result;
Resultaat:
+----------+ | Result | |----------| | NULL | +----------+
Voorbeeld 4 – Een databasevoorbeeld
Hier is een eenvoudig voorbeeld van het gebruik van SPACE()
om ruimte tussen twee databasekolommen in te voegen wanneer geretourneerd vanuit een database:
USE Music; SELECT TOP(7) ArtistName + SPACE(5) + AlbumName AS 'Artist and Album' FROM Artists ar INNER JOIN Albums al ON ar.ArtistId = al.ArtistId INNER JOIN Genres g ON al.GenreId = g.GenreId WHERE g.Genre = 'Rock';
Resultaat:
+-------------------------------------------+ | Artist and Album | |-------------------------------------------| | Iron Maiden Powerslave | | AC/DC Powerage | | Devin Townsend Ziltoid the Omniscient | | Devin Townsend Casualties of Cool | | Devin Townsend Epicloud | | Iron Maiden Somewhere in Time | | Iron Maiden Piece of Mind | +-------------------------------------------+
Hoe zit het met 1 of 2 ruimtes?
Dit is een geweldige functie om veel spaties toe te voegen, maar het kan ook de leesbaarheid van de code verbeteren als er een klein aantal spaties wordt gebruikt, vooral als de code veel gevallen bevat waarin spaties zijn toegevoegd.
Bij gebruik van SPACE()
je kunt zien hoeveel spaties in een oogwenk, zonder ze te hoeven tellen.
Kijk bijvoorbeeld eens of je kunt zien hoeveel spaties er in het volgende staan:
SELECT 'Keep' + ' ' + 'away!';
Je eerste reactie kan een snelle gok zijn (zeg, "2 of 3"), voordat je wat nauwkeuriger gaat kijken om het te controleren. Om 100% zeker te zijn, zou je waarschijnlijk met je cursor over de spatie moeten gaan om het aantal spaties te tellen.
Kijk nu naar de volgende code:
SELECT 'Keep' + SPACE(2) + 'away!';
Je hoeft niet te raden. Je kunt 2
. zien rechtstreeks in de code geschreven.
Dat gezegd hebbende, kan de waarde binnen een variabele liggen, zodat uw code er meer als volgt uit kan zien:
SELECT 'Keep' + SPACE(@space_size) + 'away!';
Wat natuurlijk geen idee geeft van hoeveel ruimtes er zijn (zonder dat je het hoeft op te zoeken). Als u echter de waarde van @space_size
. al kent, je bent klaar om te gaan.
Voorbeeld 5 – Variabele ruimtegrootte
Hier is een voorbeeld dat het vorige punt demonstreert.
Hier wordt het aantal spaties gedefinieerd binnen een variabele. In dit geval is het gemakkelijk om de waarde van de variabele te zien, zoals deze is gedefinieerd in de regel direct voorafgaand aan de SPACE()
functie (dit zal natuurlijk niet altijd het geval zijn):
DECLARE @space_size int SET @space_size = 2 SELECT 'Keep' + SPACE(@space_size) + 'away!' AS Result GO
Resultaat:
+-------------+ | Result | |-------------| | Keep away! | +-------------+
Unicode of meer dan 8000 spaties?
Microsoft stelt dat u REPLICATE
moet gebruiken om spaties in Unicode-gegevens op te nemen of om meer dan 8000 tekens te retourneren. in plaats van SPACE
.