SQL заполнение 0 слева от числа в строке - PullRequest
1 голос
/ 15 февраля 2020

Я новичок в SQL языке и использую postgre sql и выполняю небольшие упражнения для обучения. У меня есть столбец строк с именем acronym из таблицы назначения:

 DO1
 ES1
 ES2
 FR1
 FR10
 FR2
 FR3
 FR4
 FR5
 FR6
 FR7
 FR8
 FR9
 GP1
 GP2
 IN1
 IN2
 MU1
 RU1
 TR1
 UA1

Я хотел бы добавить дополнительный ноль для чисел акронима, которые имеют только одну ди git, вывод:

 DO01
 ES01
 ES02
 FR01
 FR02
 FR03
 FR04
 FR05
 FR06
 FR07
 FR08
 FR09
 FR10
 GP01
 GP02
 IN01
 IN02
 MU01
 RU01
 TR01
 UA01

Как я могу получить слева от первого числа в строке? Я думаю, что есть какое-то регулярное выражение, но я не понял этого

Ответы [ 3 ]

1 голос
/ 15 февраля 2020

попробуйте с помощью ниже:

to_char() функция

select to_char(column1, 'fm000') as column2
from Test_table;

fm Префикс «Режим заполнения» позволяет избежать пробелов в результирующей переменной. 000 определяет количество цифр, которое вы хотите иметь.

1 голос
/ 15 февраля 2020

Вы можете использовать функцию rpad() для добавления символов в end значения:

select rpad(col, '0', 4)

В вашем случае, однако, вы хотите промежуточное значение. На простом методе - при условии, что первые два символа являются строками - это:

(case when length(col) = 3
      then left(col, 2) || '0' || right(col, 1)
      else col
 end)

Другая возможность использует regexp_replace():

regexp_replace(col, '^([^0-9]{2})([0-9])$', '\10\2')

Оба из них предполагают, что Строки для заполнения - это три символа, что соответствует вашим данным. Неясно, что вы хотите для других длин.

0 голосов
/ 15 февраля 2020

Вы можете использовать строковые функции, такие как lpad(), substr(), left():

select 
  concat(left(columnname, 2), lpad(substr(columnname, 3), 2, '0')) result
from tablename

См. Демонстрационную версию . Результаты:

| result |
| ------ |
| DO01   |
| ES01   |
| ES02   |
| FR01   |
| FR10   |
| FR02   |
| FR03   |
| FR04   |
| FR05   |
| FR06   |
| FR07   |
| FR08   |
| FR09   |
| GP01   |
| GP02   |
| IN01   |
| IN02   |
| MU01   |
| RU01   |
| TR01   |
| UA01   |
...