Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Извлечь ФИО и дату рождения / 9 сообщений из 9, страница 1 из 1
22.03.2024, 11:00
    #40138514
Andre3www
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечь ФИО и дату рождения
Добрый день!
Есть txt-файл c данными:
1Иванов Иван Иванович01.01.1991
2Петров Петр Петрович02.02.1992
3Сидоров Сидр Сидорович03.03.1993
и т.д.

Помогите пжл написать процедуру - которая бы извлекала из файла - Фамилию Имя Отчество и отдельно Дату Рождения
Результат: Иванов Иван Иванович
01.01.1991
...
Рейтинг: 0 / 0
22.03.2024, 15:56
    #40138517
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечь ФИО и дату рождения
Andre3www [игнорируется] 
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
SQL> !cat /tmp/txt-файл\ с\ данными
1Иванов Иван Иванович01.01.1991
22Петров Петр Петрович02.02.1992
333Сидоров Сидр Сидорович03.03.1993

SQL> col full_name for a30
SQL> with function get_nth(s varchar2, nth int)
  2    return varchar2
  3  is
  4  begin
  5    return regexp_substr(s, '^(\d+)(.*)(\d{2}\.\d{2}\.\d{4})$', 1, 1, 'c', nth);
  6  end;
  7  select to_number(get_nth(s, 1)) id,
  8         get_nth(s, 2) full_name,
  9         to_date(get_nth(s, 3), 'dd/mm/yyyy') birth_date
 10    from external(
 11           (s varchar2(2000))
 12           default directory my_dir
 13           location ('txt-файл с данными')
 14         )
 15  /

        ID FULL_NAME                      BIRTH_DATE
---------- ------------------------------ ------------------
         1 Иванов Иван Иванович           01-JAN-91
        22 Петров Петр Петрович           02-FEB-92
       333 Сидоров Сидр Сидорович         03-MAR-93

SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 23c Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
...
Рейтинг: 0 / 0
27.03.2024, 07:38
    #40138536
Andre3www
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечь ФИО и дату рождения
Здравствуйте!
Подскажите пжл как извлечь куски текста разделенными ';' - в Oracle

Например есть строки:
ООО "Арбуз";;;;
ОАО "RED";;154454856;;
Иванов Иван Иванович;01.02.2000;1245789657;1245786

т.е. не везде в строках есть данные межды ';'

Результат должен быть таким:
ООО "Арбуз" пусто пусто пусто
ОАО "RED" пусто 154454856 пусто
Иванов Иван Иванович 01.02.2000 1245789657 1245786
...
Рейтинг: 0 / 0
27.03.2024, 10:47
    #40138538
Andrey77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечь ФИО и дату рождения
Andre3www [игнорируется] 

with x as (
select 'ООО "Арбуз";;;;' s from dual union all
select 'ОАО "RED";;154454856;;' from dual union all
select 'Иванов Иван Иванович;01.02.2000;1245789657;1245786' from dual
)
select s
, substr(s, 0, instr(s, ';', 1, 1)-1) s1
, substr(s, instr(s, ';', 1, 1)+1, instr(s, ';', 1, 2)-instr(s, ';', 1, 1)-1 ) s2
, substr(s, instr(s, ';', 1, 2)+1, instr(s, ';', 1, 3)-instr(s, ';', 1, 2)-1 ) s3
, substr(s, instr(s, ';', 1, 3)+1, instr(s, ';', 1, 4)-instr(s, ';', 1, 3)-1 ) s4
, substr(s, instr(s, ';', 1, 4)+1, instr(s, ';', 1, 5)-instr(s, ';', 1, 4)-1 ) s5
from (select s || ';' as s from x)
...
Рейтинг: 0 / 0
27.03.2024, 11:10
    #40138539
Andre3www
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечь ФИО и дату рождения
Andrey77  27.03.2024, 10:47
[игнорируется]
Andre3www [игнорируется] 

with x as (
select 'ООО "Арбуз";;;;' s from dual union all
select 'ОАО "RED";;154454856;;' from dual union all
select 'Иванов Иван Иванович;01.02.2000;1245789657;1245786' from dual
)
select s
, substr(s, 0, instr(s, ';', 1, 1)-1) s1
, substr(s, instr(s, ';', 1, 1)+1, instr(s, ';', 1, 2)-instr(s, ';', 1, 1)-1 ) s2
, substr(s, instr(s, ';', 1, 2)+1, instr(s, ';', 1, 3)-instr(s, ';', 1, 2)-1 ) s3
, substr(s, instr(s, ';', 1, 3)+1, instr(s, ';', 1, 4)-instr(s, ';', 1, 3)-1 ) s4
, substr(s, instr(s, ';', 1, 4)+1, instr(s, ';', 1, 5)-instr(s, ';', 1, 4)-1 ) s5
from (select s || ';' as s from x)
Спасибо!

А через функцию REGEXP_SUBSTR можно оформить?
...
Рейтинг: 0 / 0
27.03.2024, 11:21
    #40138540
Andrey77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечь ФИО и дату рождения
Andre3www [игнорируется] 

можно.
...
Рейтинг: 0 / 0
27.03.2024, 11:33
    #40138541
Andre3www
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечь ФИО и дату рождения
Andrey77  27.03.2024, 11:21
[игнорируется]
Andre3www [игнорируется] 

можно.
Сможете скинуть скрипт решения?

И как еще перевезти из текста цифры в числовой формат?
т.е. 1строка - текст
2строка - дата
3строка - числа
4строка - числа
...
Рейтинг: 0 / 0
27.03.2024, 11:55
    #40138543
Andrey77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечь ФИО и дату рождения
Andre3www  27.03.2024, 11:33
[игнорируется]
Andrey77  27.03.2024, 11:21
[игнорируется]
Andre3www [игнорируется] 

можно.
Сможете скинуть скрипт решения?

И как еще перевезти из текста цифры в числовой формат?
т.е. 1строка - текст
2строка - дата
3строка - числа
4строка - числа
предлагаю изучить документацию и сделать самому :) это будет очень полезно и повысит навыки
...
Рейтинг: 0 / 0
27.03.2024, 12:20
    #40138546
Andre3www
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечь ФИО и дату рождения
Andrey77  27.03.2024, 11:55
[игнорируется]
Andre3www  27.03.2024, 11:33
[игнорируется]
Andrey77  27.03.2024, 11:21
[игнорируется]
Andre3www [игнорируется] 

можно.
Сможете скинуть скрипт решения?

И как еще перевезти из текста цифры в числовой формат?
т.е. 1строка - текст
2строка - дата
3строка - числа
4строка - числа
предлагаю изучить документацию и сделать самому :) это будет очень полезно и повысит навыки
Сделал 1,2 и 4 пункт:
3-й пункт не могу сообразить? ((

select S
regexp_substr(S, '([^;]+)') as ФИО
,to_date(regexp_substr(S, '[0-9]{2}.[0-9]{2}.[0-9]{4}'), 'DD.MM.YYYY') as ДАТА_РОЖДЕНИЯ
,to_number(regexp_substr((S.............................. as ИНН
,regexp_substr(S, '([^;]+$)') as СНИЛС
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Извлечь ФИО и дату рождения / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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