powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SUBSTR INSTR... надо распарсить номер накладной
4 сообщений из 4, страница 1 из 1
SUBSTR INSTR... надо распарсить номер накладной
    #39771021
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день

Есть некий обработчик номеров накладных, который из номера выделяет необходимую строку.
От внешней системы стали приходить новые номера вида ЦП-6278-0000030 и вот для них результат должен быть 30 , а сейчас 6278
Как дописать поле rezultat, что бы для новой накладной было значение 30 и не испортить другие?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with tbl as (
select 'ЦП-21838611-1-1' bill  from dual union
select 'ЦП-16945846/1-1' bill  from dual union
select 'ЦП-2094102' bill  from dual union
select 'НП-0000053/3/1/1' bill  from dual union
select 'ЦП-6278-0000030' bill  from dual --!!! new bill
)
select bill_full, -- Исходный номер
       bill, 
       bill_shrinked,
       COALESCE(SUBSTR(bill_shrinked,1,INSTR(bill_shrinked,'-')-1), bill_shrinked, 
                SUBSTR(bill,1,INSTR(bill,'-')-1), bill) AS rezultat -- результат!!!
FROM
(select bill bill_full,
       SUBSTR(bill, 4) AS bill,
       SUBSTR(bill, 4, INSTR(bill, '/') - 4) AS bill_shrinked
from tbl)



Спасибо
...
Рейтинг: 0 / 0
SUBSTR INSTR... надо распарсить номер накладной
    #39771029
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
    , coalesce(regexp_substr(bill_full,'\w+-\d+-(\d{7})$',1,1,'',1)
              , regexp_substr(bill_full,'\w+-(\d+)',1,1,'',1)
              )
...
Рейтинг: 0 / 0
SUBSTR INSTR... надо распарсить номер накладной
    #39771030
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

спасибо, у меня пока такой колхоз ((( надо учить регулярки
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
       COALESCE(SUBSTR(bill_shrinked,1,INSTR(bill_shrinked,'-')-1), bill_shrinked, 
                CASE
                     WHEN  INSTR(bill,'-',-1) > 0 AND
                           LENGTH(SUBSTR(bill,INSTR(bill,'-',-1)+1)) > 6 AND 
                           INSTR(SUBSTR(bill,INSTR(bill,'-',-1)+1),'-') = 0 AND
                           INSTR(SUBSTR(bill,INSTR(bill,'-',-1)+1),'/') = 0 THEN 
                 LTRIM(SUBSTR(bill,INSTR(bill,'-',-1)+1),'0')
                 ELSE NULL END,                                                                    
                SUBSTR(bill,1,INSTR(bill,'-')-1), bill) AS bill
...
Рейтинг: 0 / 0
SUBSTR INSTR... надо распарсить номер накладной
    #39771042
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_Demin,

Из приведенных данных не следует, что вчера не было ЦП-3-2-1, а завтра не будет ЦП-1234567-7654321-1.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SUBSTR INSTR... надо распарсить номер накладной
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]