W SQL RPAD()
służy do wypełnienia prawej części ciągu określonym znakiem. Funkcja może być używana na ciągach i liczbach, chociaż w zależności od DBMS, liczby muszą być przekazane jako ciąg, zanim będą mogły zostać uzupełnione.
DBMS, które mają RPAD()
funkcja obejmuje MySQL, MariaDB, PostgreSQL i Oracle.
DBMS, których nie mieć RPAD()
funkcja obejmuje SQL Server i SQLite.
Przykład
Oto przykład demonstrujący RPAD()
funkcja:
SELECT RPAD('Look Right', 40);
Wynik:
+------------------------------------------+ | RPAD('Look Right', 40) | +------------------------------------------+ | Look Right | +------------------------------------------+
Tutaj prawa część ciągu jest uzupełniona spacją (domyślny znak wypełniający), a wynikowy ciąg ma długość 40 znaków (ponieważ określiłem 40
jako drugi argument).
Oracle działa tak samo, ale musimy użyć FROM DUAL
wykonując zapytanie w ten sposób (bez odpytywania rzeczywistej tabeli):
SELECT RPAD('Look Right', 40)
FROM DUAL;
Wynik:
RPAD('LOOKRIGHT',40) ___________________________________________ Look Right
W powyższych przykładach użyłem dużo dopełnienia, aby było widoczne.
Oto kolejny przykład, który może wyraźniej zademonstrować prawidłowe wypełnienie:
SELECT CONCAT(RPAD('abc', 4), 'def');
Wynik:
abc def
W tym przypadku połączyłem abc
z def
ale abc
miał prawo dopełnienia zastosowane z RPAD()
funkcja.
Określ znak wypełniający
Wypełnienie niekoniecznie musi być spacją. Możemy opcjonalnie dodać trzeci argument, aby określić znak (lub znaki) do użycia w dopełnieniu.
SELECT RPAD('Rat', 4, 't');
Wynik:
Ratt
Może być również używany do poprawiania numerów padów za pomocą zer (lub innej cyfry):
SELECT RPAD('7', 3, '0');
Wynik:
700
To oczywiście zmienia liczbę i w tym przypadku to samo można było osiągnąć po prostu mnożąc liczbę przez 100. Jednak mnożenie liczby nie powoduje zastosowania do niej dopełnienia.
Poniższy przykład pokazuje, co mam na myśli:
SELECT RPAD('77', 3, '0');
Wynik:
770
Pomnożenie 77 przez 100 dałoby zły wynik.
W powyższych przykładach podałem liczbę jako ciąg znaków.
W niektórych DBMS-ach (takich jak MariaDB i MySQL) możemy przekazać liczbę jako liczbę, jak również liczbę do uzupełnienia:
SELECT RPAD(7, 3, 0);
Wynik:
700
Możemy to również zrobić w Oracle:
SELECT RPAD(7, 3, 0)
FROM DUAL;
Wynik:
700
Ale PostgreSQL ma z tym problem:
SELECT RPAD(7, 3, 0);
Wynik:
ERROR: function rpad(integer, integer, integer) does not exist
Serwer SQL
SQL Server nie ma funkcji RPAD()
funkcji, ale to nie powstrzymuje nas przed dodawaniem dopełnienia do liczb i ciągów.
Liczby
Jeśli liczba ma część ułamkową, FORMAT()
funkcja wystarczy:
SELECT
FORMAT(0.7, '.000') AS "1",
FORMAT(0.7, '0.00') AS "2",
FORMAT(7.0, '0.00') AS "3";
Wynik:
+------+------+------+ | 1 | 2 | 3 | |------+------+------| | .700 | 0.70 | 7.00 | +------+------+------+
Działa to tak, że przekazujemy liczbę, po której następuje ciąg formatu. W powyższym przykładzie ciąg formatu składa się z niestandardowych specyfikatorów formatu liczbowego, co powoduje, że oryginalna liczba zawiera cyfry dodawane do części ułamkowej. Jeśli w oryginalnej liczbie nie ma już tylu cyfr, jest ona dopełniana zerami.
Ale jeśli liczba nie ma części ułamkowej, możemy użyć REPLACE()
funkcja do usuwania separatora dziesiętnego stosowanego za pomocą FORMAT()
funkcja:
SELECT
REPLACE(FORMAT(7, '.00', 'en-US'), '.', '') AS "1",
REPLACE(FORMAT(17, '.00', 'en-US'), '.', '') AS "2",
REPLACE(FORMAT(73.5, '.00', 'en-US'), '.', '') AS "3";
Wynik:
+-----+------+------+ | 1 | 2 | 3 | |-----+------+------| | 700 | 1700 | 7350 | +-----+------+------+
Ta metoda może być również używana do dodawania wiodących zer, jeśli jest to wymagane. Po prostu dodaj je po lewej stronie kropki dziesiętnej w ciągu formatu.
Tutaj Ja jawnie użyłem en-US
jako (opcjonalny) trzeci argument, aby zapewnić, że separatorem dziesiętnym jest kropka/kropka, zgodnie z konwencją używaną przez en-US
lokalizacja.
Tekst
Oto technika, której można użyć na danych tekstowych:
SELECT
LEFT('Dog' + '.........', 9) AS "1",
LEFT('Horse' + '.........', 9) AS "2",
LEFT('Crocodile' + '.........', 9) AS "3";
Wynik:
+-----------+-----------+-----------+ | 1 | 2 | 3 | |-----------+-----------+-----------| | Dog...... | Horse.... | Crocodile | +-----------+-----------+-----------+
Chociaż musisz uważać, aby przypadkowo nie odciąć części sznurka lub dodać niechcianych spacji.