sql >> Databáze >  >> NoSQL >> MongoDB

SQL RPAD()

V SQL RPAD() se používá k doplnění pravé části řetězce zadaným znakem. Funkci lze použít pro řetězce a čísla, i když v závislosti na DBMS může být nutné předat čísla jako řetězec, než je lze doplnit.

DBMS, které mají RPAD() funkce zahrnují MySQL, MariaDB, PostgreSQL a Oracle.

DBMS, které nedělají mít RPAD() funkce zahrnují SQL Server a SQLite.

Příklad

Zde je příklad demonstrující RPAD() funkce:

SELECT RPAD('Look Right', 40);

Výsledek:

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

Zde je pravá část řetězce doplněna mezerou (výchozí znak výplně) a výsledný řetězec je dlouhý 40 znaků (protože jsem zadal 40 jako druhý argument).

Oracle funguje stejně, ale musíme použít FROM DUAL když děláte dotaz, jako je tento (bez dotazu na skutečnou tabulku):

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

Výsledek:

                       RPAD('LOOKRIGHT',40) 
___________________________________________ 
Look Right                                 

Ve výše uvedených příkladech jsem použil hodně vycpávek, aby bylo patrné.

Zde je další příklad, který může jasněji demonstrovat správné odsazení:

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

Výsledek:

abc def

V tomto případě jsem zřetězil abc s def ale abc měl aplikovaný pravý výplň pomocí RPAD() funkce.

Určení znaku výplně

Polstrování nemusí být nutně prostorem. Volitelně můžeme přidat třetí argument, který specifikuje znak (nebo znaky), který se má použít ve výplňovém poli.

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

Výsledek:

Ratt

Lze jej také použít k úpravě čísel padů s nulami (nebo jinou číslicí):

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

Výsledek:

700

To samozřejmě změní číslo a v tomto případě by toho bylo možné dosáhnout jednoduše vynásobením čísla 100. Vynásobením čísla se však ve skutečnosti neaplikuje výplň.

Následující příklad ukazuje, co tím myslím:

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

Výsledek:

770

Vynásobení 77 číslem 100 by mělo špatný výsledek.

Ve výše uvedených příkladech jsem předal číslo jako řetězec.

V některých systémech DBMS (jako je MariaDB a MySQL) můžeme číslo předat jako číslo a také jako číslo, kterým jej doplníme:

SELECT RPAD(7, 3, 0);

Výsledek:

700

Můžeme to udělat také v Oracle:

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

Výsledek:

700

Ale PostgreSQL má s tímto problém:

SELECT RPAD(7, 3, 0);

Výsledek:

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

SQL Server

SQL Server nemá RPAD() funkce, ale to nás nezastaví v přidávání odsazení k číslům a řetězcům.

Čísla

Pokud má číslo zlomkovou část, FORMAT() funkce bude stačit:

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

Výsledek:

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

Funguje to tak, že předáme číslo a za ním formátovací řetězec. Ve výše uvedeném příkladu se formátovací řetězec skládá z vlastních číselných specifikátorů formátu, což vede k tomu, že původní číslo má k jeho zlomkové části přidané číslice. Pokud v původním čísle již není tolik číslic, je doplněno nulami.

Ale pokud číslo nemá zlomkovou část, pak můžeme použít REPLACE() funkce k odstranění desetinného oddělovače, který je použit s FORMAT() funkce:

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";

Výsledek:

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

Tuto metodu lze v případě potřeby také použít k přidání úvodních nul. Jednoduše je přidejte nalevo od desetinné čárky ve formátovacím řetězci.

Zde jsem explicitně použil en-US jako (volitelný) třetí argument, který zajišťuje, že oddělovač desetinných míst je tečka/tečka, což je konvence používaná v en-US národní prostředí.

Text

Zde je technika, kterou lze použít na textová data:

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

Výsledek:

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

I když budete muset dávat pozor, abyste omylem neuřízli část provázku nebo nepřidali nechtěné mezery.


  1. Jaký je rozdíl mezi MongoTemplate Spring Data a MongoRepository?

  2. Importujte data do svých nově vytvořených instancí MongoDB

  3. Jaké znaky NEJSOU povoleny v názvech polí MongoDB?

  4. MongoDB $weeklyUpdate #65 (15. dubna 2022):Čas GDELT, Mongoose a Hackathon!