Дополнение строки слева (LPAD)

Функция

Дополнение строки слева заданными символами.

Спецификация
 
<​новая длина​>::=
<​дополняемые символы​>::=
Общие правила
  1. В качестве <​строки​> можно использовать выражения типа CHAR, VARCHAR, NCHAR, NCHAR VARYING.

  2. <​Новая длина​> должна быть беззнаковым <​числовым литералом​>.

  3. Если <​новая длина​> больше исходной длины <​строки​>, то <​строка​> расширяется слева <​дополняемыми символами​> до <​новой длины​> <​строки​> (возможно, с повторением <​дополняемых символов​>).

    select lpad('12345',10, '**');
    
    | *****12345 |
  4. Если тип данных <​строки​> CHAR, то концевые пробелы справа удаляются.

  5. Если <​дополняемые символы​> не указаны, по умолчанию <​строка​> дополняется пробелами.

  6. Если значение <​новая длина​> меньше исходной длины <​строки​>, то исходная <​строка​> усекается до заданной <​новой длины​> справа.

    select lpad('12345',3, '**');
    
    | 123 |
  7. Если суммарная длина аргумента <​дополняемые символы​> и исходной длины <​строки​> больше, чем указанная <​новая длина​>, <​строка​> дополняется только частью аргумента <​дополняемые символы​>. В этом случае аргумент <​дополняемые символы​> усекается справа.

    select lpad('12345',10,'abcdefgh');
    
    | abcde12345 |
  8. Все аргументы функции могут быть заданы <​SQL-параметром​>, который должен содержать спецификацию типа данных параметра.

    select lpad(? (char(20)), ? (int), ? (char(10)));
    Тестовая строка
    30
    12345678
    
    |12345678  12345Тестовая строка|

Возвращаемое значение
  1. <​Строка​>, дополненная слева указанными последовательностями символов. Длина <​строки​> – максимум из исходной длины <​строки​> и <​длины​>.

  2. Тип возвращаемого значения совпадает с типом аргумента.

  3. Если аргумент NULL, результат NULL.

Примеры
select substr(firstnam,1,1) || '.' || name,
  case length(ltrim(to_char(salary)))
  when 4 then lpad(ltrim(to_char(salary)), 5, '$')
  else lpad(ltrim(to_char(salary)), 6, '$') end from person;

| J. COLVILLE | $3010  |
| G. POORE    | $8000  |
| J. RAEBIGER | $5100  |
| V. PARK     | $3300  |
| L. MARKUSH  | $8800  |
| F. VAN DUYN | $5100  |
| M. WORLTON  | $2700  |
| S. MILLS    | $3300  |
| C. WELLS    | $16200 |
| J. FARRIS   | $9300  |
| L. STANWOOD | $4200  |
| E. WOOLSEY  | $10800 |
…
select lpad(' ' || to_char(sysdate,'dd.mm.yyyy TIME: hh:mi'),
  36, upper('Current date:'))
  from person
  where personid=2;

|CURRENT DATE: 18.09.1998 TIME: 17:05|

select rpad(c, 10, substr(vc, 1, 3)) from tst;