sql >> Database >  >> NoSQL >> MongoDB

SQL-RPAD()

In SQL, RPAD() wordt gebruikt om het rechtergedeelte van een tekenreeks op te vullen met een opgegeven teken. De functie kan worden gebruikt op tekenreeksen en getallen, hoewel, afhankelijk van het DBMS, getallen mogelijk als een tekenreeks moeten worden doorgegeven voordat ze kunnen worden opgevuld.

DBMS'en met een RPAD() functies omvatten MySQL, MariaDB, PostgreSQL en Oracle.

DBMS'en die niet een RPAD() . hebben functie omvatten SQL Server en SQLite.

Voorbeeld

Hier is een voorbeeld om de RPAD() te demonstreren functie:

SELECT RPAD('Look Right', 40);

Resultaat:

+------------------------------------------+
| RPAD('Look Right', 40)                   |
+------------------------------------------+
| Look Right                               |
+------------------------------------------+

Hier wordt het rechterdeel van de tekenreeks opgevuld met een spatie (het standaard opvulteken) en de resulterende tekenreeks is 40 tekens lang (omdat ik 40 heb opgegeven als het tweede argument).

Oracle werkt hetzelfde, maar we moeten FROM DUAL . gebruiken bij het doen van een zoekopdracht als deze (zonder een echte tabel te doorzoeken):

SELECT RPAD('Look Right', 40) 
FROM DUAL;

Resultaat:

                       RPAD('LOOKRIGHT',40) 
___________________________________________ 
Look Right                                 

In de bovenstaande voorbeelden heb ik veel opvulling gebruikt om de opvulling duidelijk te maken.

Hier is nog een voorbeeld dat de juiste opvulling duidelijker kan aantonen:

SELECT CONCAT(RPAD('abc', 4), 'def');

Resultaat:

abc def

In dit geval heb ik abc . aaneengeschakeld met def maar abc had juiste opvulling toegepast met de RPAD() functie.

Geef een opvulkarakter op

De opvulling hoeft niet per se een spatie te zijn. We kunnen optioneel een derde argument toevoegen om het teken (of de tekens) te specificeren dat in de opvulling moet worden gebruikt.

SELECT RPAD('Rat', 4, 't');

Resultaat:

Ratt

Het kan ook worden gebruikt voor rechtse padnummers met nullen (of een ander cijfer):

SELECT RPAD('7', 3, '0');

Resultaat:

700

Dit verandert uiteraard het getal en in dit geval had hetzelfde kunnen worden bereikt door het getal met 100 te vermenigvuldigen. Als je een getal vermenigvuldigt, wordt er echter niet echt opvulling op toegepast.

Het volgende voorbeeld laat zien wat ik bedoel:

SELECT RPAD('77', 3, '0');

Resultaat:

770

77 vermenigvuldigen met 100 zou de verkeerde uitkomst hebben gehad.

In de bovenstaande voorbeelden heb ik het nummer als een string doorgegeven.

In sommige DBMS'en (zoals MariaDB en MySQL) kunnen we het nummer als een nummer doorgeven, evenals het nummer om het mee op te vullen:

SELECT RPAD(7, 3, 0);

Resultaat:

700

We kunnen dit ook in Oracle doen:

SELECT RPAD(7, 3, 0) 
FROM DUAL;

Resultaat:

700

Maar PostgreSQL heeft hier een probleem mee:

SELECT RPAD(7, 3, 0);

Resultaat:

ERROR:  function rpad(integer, integer, integer) does not exist

SQL-server

SQL Server heeft geen RPAD() functie, maar dat weerhoudt ons er niet van om opvulling toe te voegen aan getallen en tekenreeksen.

Cijfers

Als het getal een fractioneel deel heeft, wordt de FORMAT() functie is voldoende:

SELECT 
    FORMAT(0.7, '.000') AS "1",
    FORMAT(0.7, '0.00') AS "2",
    FORMAT(7.0, '0.00') AS "3";

Resultaat:

+------+------+------+
| 1    | 2    | 3    |
|------+------+------|
| .700 | 0.70 | 7.00 |
+------+------+------+

De manier waarop het werkt, is dat we het nummer doorgeven, gevolgd door een opmaakreeks. In het bovenstaande voorbeeld bestaat de notatiereeks uit aangepaste numerieke notatiespecificaties die ertoe leiden dat het oorspronkelijke getal cijfers heeft toegevoegd aan het fractionele deel ervan. Als er nog niet zoveel cijfers in het oorspronkelijke nummer staan, dan is het opgevuld met nullen.

Maar als het getal geen fractioneel deel heeft, kunnen we de REPLACE() gebruiken functie om het decimaalteken te verwijderen dat is toegepast met de FORMAT() functie:

SELECT 
    REPLACE(FORMAT(7, '.00', 'en-US'), '.', '') AS "1",
    REPLACE(FORMAT(17, '.00', 'en-US'), '.', '') AS "2",
    REPLACE(FORMAT(73.5, '.00', 'en-US'), '.', '') AS "3";

Resultaat:

+-----+------+------+
| 1   | 2    | 3    |
|-----+------+------|
| 700 | 1700 | 7350 |
+-----+------+------+

Deze methode kan indien nodig ook worden gebruikt om voorloopnullen toe te voegen. Voeg ze gewoon toe aan de linkerkant van de komma in de opmaakreeks.

Hier, ik gebruikte expliciet en-US als het (optionele) derde argument om ervoor te zorgen dat het decimaalteken een punt/punt is, wat de conventie is die wordt gebruikt door de en-US landinstelling.

Tekst

Hier is een techniek die kan worden gebruikt op tekstuele gegevens:

SELECT 
    LEFT('Dog' + '.........', 9) AS "1",
    LEFT('Horse' + '.........', 9) AS "2",
    LEFT('Crocodile' + '.........', 9) AS "3";

Resultaat:

+-----------+-----------+-----------+
| 1         | 2         | 3         |
|-----------+-----------+-----------|
| Dog...... | Horse.... | Crocodile |
+-----------+-----------+-----------+

Hoewel je moet oppassen dat je niet per ongeluk een deel van de string afhakt of ongewenste spaties toevoegt.


  1. Wat is de juiste manier om te indexeren in MongoDB als er een grote combinatie van velden bestaat?

  2. Bursts van RedisTimeoutException met behulp van StackExchange.Redis

  3. Bestandsschrijfbewerkingen in mongo-script?

  4. Redis-replicatieconfiguratie