Oracle SQL для форматирования поля - PullRequest
0 голосов
/ 05 февраля 2020

Я ищу Oracle sql для форматирования поля условия платежа в указанном формате c, как показано ниже:

Original
30/60/90/120/150/180
Formated
30 60 90 120150180

Original
150/180/210
Formated
150180210

Единственное, что я придумал, это replace(pgto, '/', ' ') и результат 30 60 90 12 150 180 Я думал о regexp_replace, но я не знаком с ним.

Редактировать: Исходное условие платежа может содержать до 12 позиций, разделенных "/", и каждая позиция может иметь 1 до 3 цифр. Example

1 Ответ

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

Вы можете использовать:

SELECT value AS original,
       LTRIM(
         REGEXP_REPLACE(
           value,
           '^((\d+)/(\d+)/(\d+)/)?(\d+)/(\d+)/(\d+)$',
           '\2 \3 \4 \5\6\7'
         )
       ) AS formatted
FROM   table_name;

Итак, для ваших тестовых данных:

CREATE TABLE table_name ( value ) AS
SELECT '30/60/90/120/150/180' FROM DUAL UNION ALL
SELECT '150/180/210' FROM DUAL;

Это выводит:

ORIGINAL             | FORMATTED         
:------------------- | :-----------------
30/60/90/120/150/180 | 30 60 90 120150180
150/180/210          | 150180210         

db <> fiddle здесь


Обновлено :

Если я правильно понял ваши обновленные требования, у вас есть Числа от 1 до 3 di git в списке с разделителями sla sh, и вы хотите вывести этот список без косой черты, чтобы каждое число заполнялось справа пробелами, чтобы оно всегда заполняло 3 символа.

Вы можете найти каждое число 1-3 di git и добавить к нему два пробела, а затем найти символы не-sla sh и оставить первые 3 в каждой группе (отбрасывая любые дополнительные символы и завершающий sla * 1045). *):

SELECT value AS original,
       REGEXP_REPLACE(
         REGEXP_REPLACE(
           value,
           '(\d{1,3})(/|$)',
           '\1  /'
         ),
         '([^/]{3})[^/]{0,2}/',
         '\1'
       ) AS formatted
FROM   table_name;

для данных примера:

CREATE TABLE table_name ( value ) AS
SELECT '30/60/90/120/150/180' FROM DUAL UNION ALL
SELECT '150/180/210' FROM DUAL UNION ALL
SELECT '90/120/150' FROM DUAL UNION ALL
SELECT '30/60/90' FROM DUAL UNION ALL
SELECT '30/60/90/120' FROM DUAL UNION ALL
SELECT '1/10/100/2' FROM DUAL;

Выходы:

ORIGINAL             | FORMATTED         
:------------------- | :-----------------
30/60/90/120/150/180 | 30 60 90 120150180
150/180/210          | 150180210         
90/120/150           | 90 120150         
30/60/90             | 30 60 90          
30/60/90/120         | 30 60 90 120      
1/10/100/2           | 1  10 1002        

дБ <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...