Vissa RDBMS tillhandahåller en LPAD()
och RPAD()
funktion som gör att vi kan vänster pad eller höger pad en sträng. Vissa funktioner tillåter oss också att lägga till inledande eller efterföljande nollor.
Nedan finns exempel på hur SQL-utfyllnad används i några av de mer populära RDBMS:erna.
Oracle
Oracle förser oss med LPAD()
och RPAD()
specifikt för utfyllnad av antingen vänster eller höger del av en sträng:
SELECT LPAD('Cat', 20)
FROM DUAL;
Resultat:
LPAD('CAT',20) _______________________ Cat
I det här fallet använde jag LPAD()
för att tillämpa vänster utfyllnad, och den resulterande strängen är 20 tecken, eftersom det är vad jag använde för det andra argumentet.
Resultatet utfylls av ett mellanslag, eftersom det är standardtecknet som används för utfyllnad. Om du inte anger vilket tecken strängen ska fyllas med, används ett mellanslag.
Du kan lägga till ett tredje tecken för att ange vilket tecken som ska användas för utfyllnaden:
SELECT LPAD('7', 3, '0')
FROM DUAL;
Resultat:
LPAD('7',3,'0') __________________ 007
I det här fallet fyllde jag ut ett nummer med nollor (även om resultatet är en sträng).
Oracle har också en TO_CHAR(number)
funktion som kan användas för att lägga till inledande nollor till ett tal:
SELECT TO_CHAR(7, 'fm000')
FROM DUAL;
Resultat:
007
0
formatelement representerar varje siffra i det ursprungliga numret och noll om ingen siffra finns på den positionen i det ursprungliga numret.
PostgreSQL
PostgreSQL har också sin egen LPAD()
och RPAD()
funktioner:
SELECT
LPAD('7', 3, '0') AS "Left Padding",
RPAD('7', 3, '0') AS "Right Padding",
LPAD(RPAD('7', 3, '0'), 5, '0') AS "Both";
Resultat:
Left Padding | Right Padding | Both --------------+---------------+------- 007 | 700 | 00700
Och den har också sin egen TO_CHAR()
funktion som fungerar ungefär som Oracles funktion med samma namn:
SELECT TO_CHAR(7, 'fm000');
Resultat:
007
MariaDB
MariaDB har sin egen LPAD()
och RPAD()
funktioner:
SELECT
LPAD('7', 3, '0') AS "Left Padding",
RPAD('7', 3, '0') AS "Right Padding",
LPAD(RPAD('7', 3, '0'), 5, '0') AS "Both";
Resultat:
+--------------+---------------+-------+ | Left Padding | Right Padding | Both | +--------------+---------------+-------+ | 007 | 700 | 00700 | +--------------+---------------+-------+
Och medan MariaDB har sin egen TO_CHAR()
funktion, den fungerar inte på siffror (den är begränsad till datum och tid).
MySQL
MySQL har också sin egen LPAD()
och RPAD()
funktioner.
Här är ett exempel på hur du använder LPAD()
mot en databaskolumn:
SELECT Genre, LPAD(Genre, 10, '.')
FROM Genres;
Resultat:
+---------+----------------------+ | 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 är lite av en anomali eftersom den inte har en LPAD()
eller RPAD()
funktion.
SQL Server har dock en FORMAT()
funktion som gör att vi enkelt kan fylla ut siffror med inledande nollor:
SELECT FORMAT(7, '000');
Resultat:
007
Det andra argumentet är en sträng med anpassat numeriskt format som bestämmer hur många tecken den resulterande strängen kommer att ha. Det faktum att jag använde nollor gör att resultatet kommer att ha inledande nollor om det behövs.
För att paddla strängar i SQL Server kan vi göra något så här:
SELECT RIGHT('.......' + 'Cat', 7);
Resultat:
....Cat
Det finns flera andra tekniker som vi kan använda för att tillämpa utfyllnad i SQL Server.