sql >> Databáze >  >> RDS >> Sqlserver

Jak funguje funkce SPACE() na serveru SQL Server (T-SQL)

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 .


  1. Oracle:Fulltextové vyhledávání s podmínkou

  2. Nahrazení funkcí mysql_* PDO a připravenými příkazy

  3. Funkce BIN_TO_NUM() v Oracle

  4. Vysvětlení velikosti úložiště „datetimeoffset“ na serveru SQL