V SQL Server můžete použít T-SQL SPACE()
funkce pro generování určitého počtu mezer.
To může být užitečné pro přidávání mezer do řetězce, například při zřetězení dvou nebo více řetězců.
Funguje to tak, že zadáte počet mezer, které potřebujete, a vrátí řetězec přesně s tímto počtem mezer.
Syntaxe
Syntaxe vypadá takto:
SPACE ( integer_expression )
Kde integer_expression je kladné celé číslo, které udává počet mezer. Pokud se jedná o zápornou hodnotu, NULL
je vráceno.
Příklad 1 – Základní použití
Zde je příklad, jak to funguje:
SELECT SPACE(40) AS Result;
Výsledek:
+------------------------------------------+ | Result | |------------------------------------------| | | +------------------------------------------+
Pokud to není jasné, výsledkem je 40 mezer.
Příklad 2 – Zřetězení s mezerami
Tento příklad by mohl demonstrovat efekt o něco lépe.
SELECT 'Keep' + SPACE(10) + 'away!' AS Result;
Výsledek:
+---------------------+ | Result | |---------------------| | Keep away! | +---------------------+
Příklad 3 – Záporná celočíselná hodnota
Argument musí mít kladnou hodnotu. Pokud je to záporná hodnota, výsledek je NULL
:
SELECT SPACE(-10) AS Result;
Výsledek:
+----------+ | Result | |----------| | NULL | +----------+
Příklad 4 – Příklad databáze
Zde je jednoduchý příklad použití SPACE()
pro vložení mezery mezi dva databázové sloupce při návratu z databáze:
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';
Výsledek:
+-------------------------------------------+ | 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 | +-------------------------------------------+
A co 1 nebo 2 mezery?
Je to skvělá funkce pro přidávání velkého množství mezer, ale může také zlepšit čitelnost kódu při zahrnutí malého počtu mezer – zvláště pokud kód obsahuje mnoho případů přidávání mezer.
Při použití SPACE()
můžete okamžitě vidět, kolik mezer, aniž byste je museli počítat.
Podívejte se například, jestli dokážete říct, kolik mezer je v následujícím:
SELECT 'Keep' + ' ' + 'away!';
Vaše první reakce může být rychlý odhad (řekněme „2 nebo 3“), než se podíváte trochu blíž, abyste to mohli zkontrolovat. Abyste si byli 100% jisti, pravděpodobně byste museli přejet kurzorem přes mezeru, abyste spočítali počet mezer.
Nyní se podívejte na následující kód:
SELECT 'Keep' + SPACE(2) + 'away!';
Není třeba hádat. Můžete vidět 2
zapsáno přímo do kódu.
Hodnota by však mohla být v rámci proměnné, takže váš kód může vypadat spíše takto:
SELECT 'Keep' + SPACE(@space_size) + 'away!';
Což samozřejmě neposkytuje žádné vodítko, kolik mezer tam je (aniž byste to museli hledat). Pokud však již znáte hodnotu @space_size
můžete jít.
Příklad 5 – Proměnná velikost prostoru
Zde je příklad, který demonstruje předchozí bod.
Zde je počet mezer definován v rámci proměnné. V tomto případě je snadné vidět hodnotu proměnné, protože je definována v řádku bezprostředně předcházejícím SPACE()
funkce (samozřejmě, nebude tomu tak vždy):
DECLARE @space_size int SET @space_size = 2 SELECT 'Keep' + SPACE(@space_size) + 'away!' AS Result GO
Výsledek:
+-------------+ | Result | |-------------| | Keep away! | +-------------+
Unicode nebo více než 8000 mezer?
Microsoft uvádí, že pro zahrnutí mezer do dat Unicode nebo pro vrácení více než 8000 znakových mezer byste měli použít REPLICATE
místo SPACE
.