Hvis du bruger Oracle Database eller MySQL, er du heldig at have LPAD()
og RPAD()
funktioner, som giver dig mulighed for at udfylde en streng med et givet tegn (eller tegn) til venstre og/eller højre.
SQL Server (eller mere præcist T-SQL) inkluderer dog ikke disse funktioner. Så hvis du har brug for noget venstre polstring, bliver du nødt til at improvisere.
Denne artikel præsenterer fire muligheder for at udfylde et tal med indledende nuller i SQL Server. Så du kan gøre ting som at slå 7
ind i 007
. Tre af disse muligheder fungerer på strenge, så du kan også anvende udfyldning på tekstdata.
Metode 1 – Brug FORMAT()-funktionen
Hvis du har brug for at anvende indledende nuller til et tal, så burde denne mulighed være alt, hvad du behøver. Denne mulighed bruger FORMAT()
fungere. Denne funktion returnerer tallet som en streng i vores specificerede format:
SELECT FORMAT(7, '000');
Resultat:
007
I dette tilfælde bruger vi 0
formatspecifikation for at formatere tallet med foranstillede nuller, hvor det er relevant. Dette er blot en af mange brugerdefinerede formatspecifikationer. Brugerdefinerede formatspecifikationer giver os mulighed for at være meget præcise om, hvordan vores nummer er formateret.
Bemærk, at FORMAT()
Funktionen er kun for tal og dato-tidsværdier. Så hvis du skal bruge polstring til en egentlig streng, så læs videre.
Metode 2 – Brug RIGHT()-funktionen
Den anden metode bruger RIGHT()
funktion for kun at returnere den yderste højre del af strengen efter tilføjelse af nogle indledende nuller.
Selvom jeg anvender indledende nuller på et "tal" her, er det faktisk en strengrepræsentation af et tal. Så hvis du har brug for at anvende polstring på en streng i stedet for et tal, så burde denne metode fungere.
SELECT RIGHT('000' + '1234', 7);
Resultat:
0001234
7
angiver, hvor mange tegn slutresultatet skal være (efter nullerne er blevet tilføjet).
Reduktion af længden
Så hvis vi reducerer det tal, vil det reducere antallet af foranstillede nuller:
SELECT RIGHT('000' + '1234', 6);
Resultat:
001234
Forøgelse af længden
Men hvis vi øger antallet, skal vi sikre os, at vi har angivet nok nuller til at udgøre den nødvendige længde:
SELECT RIGHT('000000' + '1234', 10);
Resultat:
0000001234
Ellers ender vi med dette:
SELECT RIGHT('000' + '1234', 10);
Resultat:
0001234
Klipning af tallet
Bemærk også, at hvis du ikke angiver nok tegn til den resulterende strenglængde, vil tallet blive skåret af, og du får kun den yderste højre del af tallet:
SELECT RIGHT('000' + '1234', 2);
Resultat:
34
Så i dette tilfælde blev det indledende tal afkortet plus de foranstillede nuller blev ignoreret.
Dette er et scenarie, hvor resultatet adskiller sig fra MySQL og Oracles LPAD()
fungere. Den funktion ville have produceret de første 2 (upolstrede) cifre i stedet for de sidste 2 cifre. Sådan:
SELECT LPAD(1234, 2, 0);
Resultat:
12
Hvis du har brug for en SQL Server-løsning, der vil opføre sig som LPAD()
i sådanne tilfælde, prøv dette:
SELECT RIGHT(REPLICATE('0', 3) + LEFT('1234', 2), 2);
Resultat:
12
Husk dog, at du får det samme resultat blot ved at bruge LEFT()
fungerer for sig selv:
SELECT LEFT('1234', 2);
Resultat:
12
Derudover kæmper jeg for at finde på en grund til, at nogen vil skære tallet kort (i betragtning af, at de prøver at fylde det), men det er i det mindste noget, man skal overveje.
Metode 3 – Brug en kombination af RIGHT() og REPLICATE()
Denne metode er næsten den samme som den forrige metode, med den eneste forskel, at jeg simpelthen erstatter de tre nuller med REPLICATE()
funktion:
SELECT RIGHT(REPLICATE('0', 3) + '1234', 7);
Resultat:
0001234
REPLICATE()
funktionen sparer dig for at skulle indtaste hvert nul (eller andet tegn) flere gange.
Bonusmetode:Metode 4 – Brug en kombination af REPLACE() og STR()
Denne metode kommer fra en helt anden vinkel end de tidligere metoder:
SELECT REPLACE(STR('1234', 6),' ','0');
Resultat:
001234
Her bruger vi REPLACE()
funktion sammen med STR()
funktion til at konvertere et tal til en streng af en bestemt længde, og derefter konvertere eventuelle mellemrumstegn til et nul.
En ting du skal være opmærksom på er, at hvis du klipper tallet kort (som vi gjorde i et tidligere eksempel), ender du med en masse stjerner i stedet for det (forkortede) tal:
SELECT REPLACE(STR('1234', 2),' ','0');
Resultat:
**