sql >> Databasteknik >  >> RDS >> Sqlserver

Vänster utfyllnad i SQL Server – 3 LPAD()-ekvivalenter

Om du använder Oracle Database eller MySQL har du turen att ha LPAD() och RPAD() funktioner, som låter dig fylla en sträng med ett givet tecken (eller tecken) till vänster och/eller höger.

SQL Server (eller mer exakt T-SQL) inkluderar dock inte dessa funktioner. Så om du behöver lite vänster stoppning måste du improvisera.

Den här artikeln presenterar fyra alternativ för att fylla ut ett tal med inledande nollor i SQL Server. Så du kan göra saker som sväng 7 till 007 . Tre av dessa alternativ fungerar på strängar, så du kan även använda utfyllnad på textdata.

Metod 1 – Använd FORMAT()-funktionen

Om du behöver använda inledande nollor på ett tal, bör detta alternativ vara allt du behöver. Det här alternativet använder FORMAT() fungera. Denna funktion returnerar numret som en sträng i vårt angivna format:

SELECT FORMAT(7, '000');

Resultat:

007

I det här fallet använder vi 0 formatspecifikation för att formatera talet med inledande nollor där det är tillämpligt. Detta är bara en av många anpassade formatspecifikationer. Anpassade formatspecifikationer gör att vi kan vara mycket exakta om hur vårt nummer är formaterat.

Observera att FORMAT() Funktionen är endast för siffror och datum och tid. Så om du behöver lägga ut stoppning på en faktisk sträng, läs vidare.

Metod 2 – Använd RIGHT()-funktionen

Den andra metoden använder RIGHT() funktion för att returnera endast den högra delen av strängen, efter att ha lagt till några inledande nollor.

Även om jag tillämpar inledande nollor på ett "tal" här, är det faktiskt en strängrepresentation av ett tal. Så om du behöver använda utfyllnad på en sträng istället för ett nummer, bör den här metoden fungera.

SELECT RIGHT('000' + '1234', 7);

Resultat:

0001234

7 anger hur många tecken slutresultatet ska vara (efter att nollorna har lagts till).

Minska längden

Så om vi minskar det antalet kommer det att minska antalet inledande nollor:

SELECT RIGHT('000' + '1234', 6);

Resultat:

001234

Öka längden

Men om vi ökar antalet måste vi se till att vi har angett tillräckligt med nollor för att göra den nödvändiga längden:

SELECT RIGHT('000000' + '1234', 10);

Resultat:

0000001234

Annars får vi det här:

SELECT RIGHT('000' + '1234', 10);

Resultat:

0001234

Klippa siffran kort

Observera också att om du inte anger tillräckligt många tecken för den resulterande stränglängden, kommer numret att skäras av och du får bara den högra delen av numret:

SELECT RIGHT('000' + '1234', 2);

Resultat:

34

Så i det här fallet trunkerades det initiala talet plus att de inledande nollorna ignorerades.

Detta är ett scenario där resultatet skiljer sig från det för MySQL och Oracles LPAD() fungera. Den funktionen skulle ha producerat de första 2 (ostoppade) siffrorna istället för de sista 2 siffrorna. Så här:

SELECT LPAD(1234, 2, 0);

Resultat:

12

Om du behöver en SQL Server-lösning som fungerar som LPAD() i sådana fall, prova detta:

SELECT RIGHT(REPLICATE('0', 3) + LEFT('1234', 2), 2);

Resultat:

12

Kom dock ihåg att du får samma resultat helt enkelt med LEFT() fungerar för sig:

SELECT LEFT('1234', 2);

Resultat:

12

Plus att jag kämpar för att komma på en anledning till varför någon vill korta numret (med tanke på att de försöker fylla på det), men det här är åtminstone något att överväga.

Metod 3 – Använd en kombination av RIGHT() och REPLICATE()

Denna metod är nästan densamma som den tidigare metoden, med den enda skillnaden är att jag helt enkelt ersätter de tre nollorna med REPLICATE() funktion:

SELECT RIGHT(REPLICATE('0', 3) + '1234', 7);

Resultat:

0001234

REPLICATE() funktionen sparar dig från att behöva skriva ut varje nolla (eller annat tecken) flera gånger.

Bonusmetod:Metod 4 – Använd en kombination av REPLACE() och STR()

Denna metod kommer från en helt annan vinkel än de tidigare metoderna:

SELECT REPLACE(STR('1234', 6),' ','0');

Resultat:

001234

Här använder vi REPLACE() funktion i kombination med STR() funktion för att konvertera ett tal till en sträng av en specifik längd och sedan konvertera eventuella mellanslag till en nolla.

En sak att vara försiktig med är att om du klipper siffran kort (som vi gjorde i ett tidigare exempel), kommer du att få en massa asterisker istället för det (förkortade) numret:

SELECT REPLACE(STR('1234', 2),' ','0');

Resultat:

**

  1. Så här löser du ORA-29283:ogiltig filoperation

  2. Det gick inte att ladda sql-moduler till databasklustret under PostgreSQL-installationen

  3. Avancerad SQL:Variationer och olika användningsfall av T-SQL Insert Statement

  4. Hur söker jag JSON-data i MySQL?