Nogle RDBMS'er giver en LPAD()
og RPAD()
funktion, der gør det muligt for os at venstre pad eller højre pad en streng. Nogle funktioner giver os også mulighed for at tilføje indledende eller efterfølgende nuller.
Nedenfor er eksempler på anvendelse af SQL-padding i nogle af de mere populære RDBMS'er.
Oracle
Oracle giver os LPAD()
og RPAD()
specifikt til udfyldning af enten venstre eller højre del af en streng:
SELECT LPAD('Cat', 20)
FROM DUAL;
Resultat:
LPAD('CAT',20) _______________________ Cat
I dette tilfælde brugte jeg LPAD()
at anvende venstre polstring, og den resulterende streng er på 20 tegn, fordi det er det, jeg brugte til det andet argument.
Resultatet udfyldes med et mellemrum, fordi det er standardtegn, der bruges til udfyldning. Hvis du ikke angiver, hvilket tegn strengen skal udfyldes med, bruges et mellemrum.
Du kan tilføje et tredje tegn for at angive, hvilket tegn der skal bruges til udfyldningen:
SELECT LPAD('7', 3, '0')
FROM DUAL;
Resultat:
LPAD('7',3,'0') __________________ 007
I dette tilfælde udfyldte jeg et tal med nuller (selvom resultatet er en streng).
Oracle har også en TO_CHAR(number)
funktion, der kan bruges til at tilføje indledende nuller til et tal:
SELECT TO_CHAR(7, 'fm000')
FROM DUAL;
Resultat:
007
0
formatelement repræsenterer hvert ciffer i det oprindelige nummer og nul, hvis der ikke findes et ciffer på den position i det oprindelige nummer.
PostgreSQL
PostgreSQL har også sin egen LPAD()
og 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
Og den har også sin egen TO_CHAR()
funktion, der fungerer meget som Oracles funktion af samme navn:
SELECT TO_CHAR(7, 'fm000');
Resultat:
007
MariaDB
MariaDB har sin egen LPAD()
og 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 | +--------------+---------------+-------+
Og mens MariaDB har sin egen TO_CHAR()
funktion, det virker ikke på tal (det er begrænset til datetime-værdier).
MySQL
MySQL har også sin egen LPAD()
og RPAD()
funktioner.
Her er et eksempel på brug af LPAD()
mod en databasekolonne:
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 er lidt af en anomali, fordi den ikke har en LPAD()
eller RPAD()
funktion.
SQL Server har dog en FORMAT()
funktion, der gør os i stand til nemt at udfylde tal med indledende nuller:
SELECT FORMAT(7, '000');
Resultat:
007
Det andet argument er en streng med tilpasset numerisk format, der bestemmer, hvor mange tegn den resulterende streng vil have. Det faktum, at jeg brugte nuller betyder, at resultatet vil have indledende nuller, hvis det er nødvendigt.
For at udfylde strenge i SQL Server kan vi gøre noget som dette:
SELECT RIGHT('.......' + 'Cat', 7);
Resultat:
....Cat
Der er forskellige andre teknikker, vi kan bruge til at anvende padding i SQL Server.