Sommige RDBMS'en bieden een LPAD()
en RPAD()
functie die ons in staat stelt om een snaar op de linker- of rechterpad te gebruiken. Sommige functies stellen ons ook in staat om voorloop- of volgnullen toe te voegen.
Hieronder staan voorbeelden van het toepassen van SQL-opvulling in enkele van de meer populaire RDBMS'en.
Oracle
Oracle biedt ons LPAD()
en RPAD()
specifiek voor het opvullen van het linker- of rechtergedeelte van een tekenreeks:
SELECT LPAD('Cat', 20)
FROM DUAL;
Resultaat:
LPAD('CAT',20) _______________________ Cat
In dit geval gebruikte ik LPAD()
om linkerpadding toe te passen, en de resulterende tekenreeks is 20 tekens, want dat is wat ik voor het tweede argument heb gebruikt.
Het resultaat wordt opgevuld door een spatie, want dat is het standaardteken dat wordt gebruikt voor opvulling. Als u niet opgeeft met welk teken de tekenreeks moet worden ingevuld, wordt een spatie gebruikt.
U kunt een derde teken toevoegen om aan te geven welk teken voor de opvulling moet worden gebruikt:
SELECT LPAD('7', 3, '0')
FROM DUAL;
Resultaat:
LPAD('7',3,'0') __________________ 007
In dit geval vulde ik een getal in met nullen (hoewel het resultaat een string is).
Oracle heeft ook een TO_CHAR(number)
functie die kan worden gebruikt om voorloopnullen aan een getal toe te voegen:
SELECT TO_CHAR(7, 'fm000')
FROM DUAL;
Resultaat:
007
De 0
formaatelement vertegenwoordigt elk cijfer in het oorspronkelijke nummer, en nul als er geen cijfer bestaat op die positie in het oorspronkelijke nummer.
PostgreSQL
PostgreSQL heeft ook zijn eigen LPAD()
en RPAD()
functies:
SELECT
LPAD('7', 3, '0') AS "Left Padding",
RPAD('7', 3, '0') AS "Right Padding",
LPAD(RPAD('7', 3, '0'), 5, '0') AS "Both";
Resultaat:
Left Padding | Right Padding | Both --------------+---------------+------- 007 | 700 | 00700
En het heeft ook zijn eigen TO_CHAR()
functie die veel lijkt op de gelijknamige functie van Oracle:
SELECT TO_CHAR(7, 'fm000');
Resultaat:
007
MariaDB
MariaDB heeft zijn eigen LPAD()
en RPAD()
functies:
SELECT
LPAD('7', 3, '0') AS "Left Padding",
RPAD('7', 3, '0') AS "Right Padding",
LPAD(RPAD('7', 3, '0'), 5, '0') AS "Both";
Resultaat:
+--------------+---------------+-------+ | Left Padding | Right Padding | Both | +--------------+---------------+-------+ | 007 | 700 | 00700 | +--------------+---------------+-------+
En hoewel MariaDB zijn eigen TO_CHAR()
. heeft functie, werkt het niet op getallen (het is beperkt tot datetime-waarden).
MySQL
MySQL heeft ook zijn eigen LPAD()
en RPAD()
functies.
Hier is een voorbeeld van het gebruik van LPAD()
tegen een databasekolom:
SELECT Genre, LPAD(Genre, 10, '.')
FROM Genres;
Resultaat:
+---------+----------------------+ | Genre | LPAD(Genre, 10, '.') | +---------+----------------------+ | Rock | ......Rock | | Jazz | ......Jazz | | Country | ...Country | | Pop | .......Pop | | Blues | .....Blues | | Hip Hop | ...Hip Hop | | Rap | .......Rap | | Punk | ......Punk | +---------+----------------------+
SQL-server
SQL Server is een beetje een anomalie omdat het geen LPAD()
heeft of RPAD()
functie.
SQL Server heeft echter wel een FORMAT()
functie waarmee we gemakkelijk getallen met voorloopnullen kunnen invullen:
SELECT FORMAT(7, '000');
Resultaat:
007
Het tweede argument is een aangepaste tekenreeks voor numerieke opmaak die bepaalt hoeveel tekens de resulterende tekenreeks zal hebben. Het feit dat ik nullen heb gebruikt, betekent dat het resultaat indien nodig voorloopnullen zal hebben.
Om strings in SQL Server op te vullen, kunnen we zoiets als dit doen:
SELECT RIGHT('.......' + 'Cat', 7);
Resultaat:
....Cat
Er zijn verschillende andere technieken die we kunnen gebruiken voor het toepassen van opvulling in SQL Server.