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

Функция

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

Спецификация
 
< новая длина >::=
< дополняемые символы >::=
Общие правила
  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;