sql >> Database >  >> RDS >> Sqlserver

Linkervulling in SQL Server – 3 LPAD()-equivalenten

Als u Oracle Database of MySQL gebruikt, heeft u het geluk de LPAD() te hebben en RPAD() functies, waarmee u een tekenreeks met een bepaald teken (of tekens) links en/of rechts kunt opvullen.

SQL Server (of beter gezegd, T-SQL) bevat deze functies echter niet. Dus als je wat vulling nodig hebt, moet je improviseren.

Dit artikel bevat vier opties voor het opvullen van een getal met voorloopnullen in SQL Server. Dus je kunt dingen doen zoals 7 turn in 007 . Drie van deze opties werken op strings, dus je kunt ook opvulling toepassen op tekstuele gegevens.

Methode 1 – Gebruik de FORMAT()-functie

Als u voorloopnullen op een getal moet toepassen, dan is deze optie alles wat u nodig hebt. Deze optie gebruikt de FORMAT() functie. Deze functie retourneert het getal als een tekenreeks in ons gespecificeerde formaat:

SELECT FORMAT(7, '000');

Resultaat:

007

In dit geval gebruiken we de 0 formaatspecificatie om het getal op te maken met voorloopnullen, indien van toepassing. Dit is slechts een van de vele specificaties voor aangepaste indelingen. Aangepaste formaatspecificaties stellen ons in staat om heel precies te zijn over hoe ons getal is opgemaakt.

Merk op dat de FORMAT() functie is alleen voor getallen en datetime-waarden. Dus als je opvulling moet toepassen op een echte string, lees dan verder.

Methode 2 – Gebruik de functie RIGHT()

De tweede methode gebruikt de RIGHT() functie om alleen het meest rechtse deel van de tekenreeks te retourneren, na toevoeging van enkele voorloopnullen.

Hoewel ik hier voorloopnullen toepas op een "getal", is het eigenlijk een tekenreeksrepresentatie van een getal. Dus als je opvulling moet toepassen op een tekenreeks in plaats van op een getal, dan zou deze methode moeten werken.

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

Resultaat:

0001234

De 7 specificeert hoeveel tekens het eindresultaat moet zijn (nadat de nullen zijn toegevoegd).

De lengte verkleinen

Dus als we dat aantal verminderen, zal het aantal voorloopnullen verminderen:

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

Resultaat:

001234

De lengte vergroten

Maar als we het aantal verhogen, moeten we ervoor zorgen dat we genoeg nullen hebben opgegeven om de vereiste lengte te maken:

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

Resultaat:

0000001234

Anders eindigen we met dit:

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

Resultaat:

0001234

Het nummer kort knippen

Houd er ook rekening mee dat als u niet genoeg tekens opgeeft voor de resulterende tekenreekslengte, het nummer wordt afgesneden en u alleen het meest rechtse deel van het nummer krijgt:

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

Resultaat:

34

Dus in dit geval werd het oorspronkelijke getal afgekapt plus de voorloopnullen werden genegeerd.

Dit is een scenario waarbij de uitkomst verschilt van die van MySQL en Oracle's LPAD() functie. Die functie zou de eerste 2 (niet-opgevulde) cijfers hebben geproduceerd in plaats van de laatste 2 cijfers. Zoals dit:

SELECT LPAD(1234, 2, 0);

Resultaat:

12

Als u een SQL Server-oplossing nodig heeft die zich gedraagt ​​als LPAD() probeer in dergelijke gevallen dit:

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

Resultaat:

12

Houd er echter rekening mee dat u hetzelfde resultaat krijgt door simpelweg de LEFT() . te gebruiken op zichzelf functioneren:

SELECT LEFT('1234', 2);

Resultaat:

12

Bovendien heb ik moeite om een ​​reden te bedenken waarom iemand het nummer wil verkorten (aangezien ze het proberen op te vullen), maar dit is in ieder geval iets om over na te denken.

Methode 3 – Gebruik een combinatie van RIGHT() en REPLICATE()

Deze methode is bijna hetzelfde als de vorige methode, met als enige verschil dat ik simpelweg de drie nullen vervang door de REPLICATE() functie:

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

Resultaat:

0001234

De REPLICATE() functie voorkomt dat u elke nul (of ander teken) meerdere keren moet typen.

Bonusmethode:Methode 4 – Gebruik een combinatie van REPLACE() en STR()

Deze methode komt uit een heel andere hoek dan de vorige methoden:

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

Resultaat:

001234

Hier gebruiken we de REPLACE() functie in combinatie met de STR() functie om een ​​getal om te zetten in een tekenreeks van een bepaalde lengte, en vervolgens eventuele spatietekens om te zetten in een nul.

Een ding om op te letten, is dat als je het nummer kort maakt (zoals we deden in een vorig voorbeeld), je een aantal sterretjes krijgt in plaats van het (verkorte) nummer:

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

Resultaat:

**

  1. Hoe gebruik ik RETURNING met ON CONFLICT in PostgreSQL?

  2. Lumen - Databaseverbinding maken tijdens runtime

  3. Een datum converteren in MySQL vanuit een stringveld

  4. implementeer LIKE-query in PDO