Строковые функции

Дополнение до определенной длины

Бывают ситуации, когда нужно получить строку определенной длины. Например, мы хотим показать последние четыре цифры номера телефона, заменив остальные цифры звездочками.

Плохое решение

Попробуем на примере:

SELECT *
  FROM contact
#phone
11234567890
2123456

Получим последние 4 цифры и длину номера телефона:

SELECT right (phone, 4) AS rest,
       length (phone)
  FROM contact
#restlength
1789010
234566

Дальше можно взять большую строку, функцией substr получить из нее необходимое количество звездочек. В конце к полученной строке звездочек добавить последние 4 цифры. Ну как-то так:

SELECT substr('*************************', 1, length (phone) - 4) || right (phone, 4) AS mask
  FROM contact
#mask
1******7890
2**3456

Задача решена. Но решение очень сложное. Если не знать, какая задача решалась, то с выражением

substr('*************************', 1, length (phone) - 4) || right (phone, 4)

можно достаточно долго разбираться.

Функции lpad и rpad

В SQL есть две функции, дополняющих строку до определенной длины.

lpad(строка, до_какой_длины, какими_символами)

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

SELECT lpad('123', 5, '*')
#lpad
1**123

Если третий параметр не передан, то строка дополняется пробелами.

SELECT lpad('123', 5)
#lpad
1  123

Если длина строки уже больше заданной, она обрезается справа.

SELECT lpad('12345', 2)
#lpad
112

rpad(строка, докакойдлины, какими_символами)`

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

SELECT  rpad('123', 5, '*')
#rpad
1123**

Если третий параметр не передан, то строка дополняется пробелами.

#rpad
1123  

Если длина строки уже больше заданной, она обрезается справа.

SELECT rpad('12345', 2)
#rpad
112

Хорошее решение

С учетом новых знаний задачу с номерами телефонов можно решить так:

SELECT lpad (right(phone, 4), length(phone), '*') AS mask
  FROM contact
#mask
1******7890
2**3456
ПредыдущаяСледующая