MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

SQL RPAD()

В SQL, RPAD() се използва за допълване на дясната част на низ с определен символ. Функцията може да се използва за низове и числа, въпреки че в зависимост от СУБД, може да се наложи числата да се предават като низ, преди да могат да бъдат допълнени.

СУБД, които имат RPAD() функция включва MySQL, MariaDB, PostgreSQL и Oracle.

СУБД, които не имат RPAD() функция включва SQL Server и SQLite.

Пример

Ето пример за демонстриране на RPAD() функция:

SELECT RPAD('Look Right', 40);

Резултат:

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

Тук дясната част на низа е допълнена с интервал (знакът за допълване по подразбиране) и полученият низ е дълъг 40 знака (защото посочих 40 като втория аргумент).

Oracle работи по същия начин, но трябва да използваме FROM DUAL когато правите заявка като тази (без заявка към действителна таблица):

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

Резултат:

                       RPAD('LOOKRIGHT',40) 
___________________________________________ 
Look Right                                 

В горните примери използвах много подплънки, за да направя подплатата очевидна.

Ето още един пример, който може да демонстрира по-ясно правилното подреждане:

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

Резултат:

abc def

В този случай свързах abc с def но abc имаше дясно запълване, приложено с RPAD() функция.

Посочете символ за подреждане

Подпълването не е задължително да е място. Можем по избор да добавим трети аргумент, за да посочим знака (или знаците), които да използваме в запълването.

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

Резултат:

Ratt

Може да се използва и за десни числа с нули (или друга цифра):

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

Резултат:

700

Това очевидно променя числото и в този случай същото би могло да се постигне просто чрез умножаване на числото по 100. Умножаването на число обаче всъщност не прилага допълване към него.

Следният пример показва какво имам предвид:

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

Резултат:

770

Умножаването на 77 по 100 би довело до грешен резултат.

В горните примери предадох числото като низ.

В някои СУБД (като MariaDB и MySQL) можем да предадем числото като число, както и числото, с което да го добавим:

SELECT RPAD(7, 3, 0);

Резултат:

700

Можем да направим това и в Oracle:

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

Резултат:

700

Но PostgreSQL има проблем с това:

SELECT RPAD(7, 3, 0);

Резултат:

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

SQL сървър

SQL Server няма RPAD() функция, но това не ни пречи да добавяме допълване към числа и низове.

Числа

Ако числото има дробна част, FORMAT() функция ще бъде достатъчна:

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

Резултат:

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

Начинът, по който работи е, че предаваме числото, последвано от форматиращ низ. В горния пример низът за формат се състои от персонализирани спецификатори на числов формат, което води до оригиналното число с цифри, добавени към неговата дробна част. Ако вече няма толкова много цифри в оригиналното число, тогава то е подплатено с нули.

Но ако числото няма дробна част, тогава можем да използваме REPLACE() функция за премахване на десетичния разделител, който е приложен с FORMAT() функция:

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

Резултат:

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

Този метод може да се използва и за добавяне на водещи нули, ако е необходимо. Просто ги добавете вляво от десетичната запетая във форматиращия низ.

Тук изрично използвах en-US като (по избор) трети аргумент, за да се гарантира, че десетичният разделител е точка/точка, което е конвенцията, използвана от en-US локал.

Текст

Ето техника, която може да се използва върху текстови данни:

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

Резултат:

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

Въпреки че ще трябва да внимавате да не отрежете случайно част от низа или да добавите нежелани интервали.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Вложени масиви в Mongoose

  2. Mongo DB Java 3.x драйвер - групиране по заявка

  3. MongoDB индекс за различни типове

  4. Как да направя вложено $lookup търсене в MongoDB?

  5. как да итерирате монго курсор в цикъл в python