Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Перенос символа из конца ячейки в начало.  [new]
YouIm
Member

Откуда:
Сообщений: 2
Есть столбец City указывается как: 'Москва г'
Нужно вывести 'г Москва', а ещё лучше 'г. Москва.'
Как это можно сделать?
10 авг 18, 07:20    [21637109]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28117
Говно-данные автоматически не очистить.
+
RTFM regexp_replace
10 авг 18, 07:25    [21637113]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
feagor
Member

Откуда: Москва
Сообщений: 124
YouIm,
А если будет "город Москва", "Москва гор.",а еще города могут писать с ошибками и сотнями разных способов. Заводите справочник городов и ссылайтесь на него
10 авг 18, 07:45    [21637128]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
Dshedoo
Member

Откуда:
Сообщений: 203
Select case when table.City = 'Москва г' then 'г Москва' a esche luchshe 'г. Москва' else table.city end as city
from table 
10 авг 18, 08:29    [21637165]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5824
YouIm,

Источник поступления данных может передавать название и тип населённого пункта отдельно? Или давать ссылку на ФИАС?
10 авг 18, 08:54    [21637178]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
Oleg M.Ivanov
Member

Откуда: Москва
Сообщений: 1026
YouIm,
with t as ( select  'Москва г' as City from dual union 
select  'гор. мОсКвА' as City from dual)
Select case when lower(t.City) like '%москва%' then  'г. Москва' else t.city end as city
from t;
10 авг 18, 09:20    [21637205]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
-2-
Member

Откуда:
Сообщений: 13675
Oleg M.Ivanov,

В РФ есть деревня Москва. Кроме того, есть населенные пункты в составе Москвы, наименование которых употребляется в сочетании с 'Москва'.
10 авг 18, 09:32    [21637226]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
Oleg M.Ivanov
Member

Откуда: Москва
Сообщений: 1026
-2-,
ну это чисто как пример разбора "говноданных". На реальной базе можно посмотреть результат разбора и подкорректировать как надо дополнительными фильтрами. В любом случае, тут полу-ручной разбор, пока не наберется нужных правил на все варианты.
10 авг 18, 09:43    [21637243]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
julat21
Member

Откуда:
Сообщений: 35
YouIm, дальше игра фантазии и реальных данных. Если есть пробелы в конце, если в конце нет г и т.п., то надо придумать условия
with t as (
           select 'Москва г' as city from dual union
           select 'Пушкино пос' as city from dual union
           select 'ПерепЕлкинО Защелкино пос.' as city from dual
)
select replace(
               substr(city, 
                      instr(city,' ',-1)+1, 
                      length(city)-instr(city,' ',-1)
                      )
       ,'.','')||
       '. '||
       initcap(
               lower(substr(city , 
                               1 , 
                               instr(city,' ',-1)-1
                            )
                    )
               ) as city
   from t
   
10 авг 18, 10:14    [21637288]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 8982
YouIm
Как это можно сделать?


Существуeт Address Cleansing/Validation софт. У нас например используется Trillium. Думаю есть (не бесплатно конечно) подобный софт и для адресов PФ (ни одна страховая компания и даже банк без этого не обойдется).

SY.
10 авг 18, 14:18    [21637900]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
YouIm
Member

Откуда:
Сообщений: 2
Спасибо всем за информацию, в принципе в голове что то появилось.
10 авг 18, 15:13    [21638049]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16606
SY
Существуeт Address Cleansing/Validation софт. У нас например используется Trillium. Думаю есть (не бесплатно конечно) подобный софт и для адресов PФ

Существует. ФИАС называется.
К сожалению, еще не по всем регионам полон/корректен.
Зато бесплатно и вполне официально :)
10 авг 18, 15:19    [21638058]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5824
andrey_anonymous,

У ФИАС есть api для батчевого установления соответствий?
10 авг 18, 15:28    [21638067]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16606
env
andrey_anonymous,

У ФИАС есть api для батчевого установления соответствий?

У ФИАС есть возможность выкачать к себе базу и обновлять ее.
http://fias.nalog.ru/Updates.aspx

А там хоть контекстный поиск прикручивайте, хоть черта лысого.
10 авг 18, 15:36    [21638079]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5824
andrey_anonymous,

т.е. по сути, логику определения соответствий делать всё равно самостоятельно

Соломон говорит о решениях, которые её уже реализовали и гарантируют NN% соответствия входа результату.
10 авг 18, 15:40    [21638086]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16606
env
т.е. по сути, логику определения соответствий делать всё равно самостоятельно

Ммм?
Не надо никакой логики "определения соответствий".
Это ~полная (теоретисски, таксаать) иерархически организованная база адресов, пополнять и обновлять которую по закону обязаны местные администрации, и на которую переводят (опять-таки законом, а кое-кого - и увесистыми пинками) все гос. структуры.
Т.о. никакой супер-логики тут уже не требуется - требуется подобрать наиболее близкий из имеющихся в БД адресов, это не особо сложно и (в случае локальной копии) не создает рисков недоступности сервиса.
На самом сайте ФИАС вполне реализован контекстный поиск - можно и так, наверное, "интегрироваться", если лень собственный контекстный индекс прикрутить.
На крайняк - вероятно, возможно устроить референс-визит в налоговую и договориться о приобретении их варианта контекстного поиска или еще какой форме сотрудничества.
10 авг 18, 16:04    [21638118]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5824
andrey_anonymous,

Что такое ФИАС я представляю, и в плане загрузки и в плане работы с этими данными. Но искать там по адресам вида "Москва Ленина 1" - то ещё удовольствие.
10 авг 18, 16:17    [21638141]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16606
env
искать там по адресам вида "Москва Ленина 1" - то ещё удовольствие.

Хинт: Попробуйте (как рекомендуют) "Ленина Москва" :) :) :)
10 авг 18, 16:31    [21638160]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16606
env
Но искать там по адресам вида "Москва Ленина 1" - то ещё удовольствие.

Собственно, вот буквально на коленке (aaa_fias_addr_full - это только адресные объекты ФИАС, на скорую руку загруженные пентахо кеттлом через лодыря) слепил маленькую иллюстрацию.
(за реальный опыт применения контекстных индексов в коммерческих проектах, поддержку русского языка и т.п. лучше спросить у коллеги Shtok)
+
create table aaa_fias_AO_lines as
with t(aoguid, keys, aline, atyp)
  as (select aoguid, formalname, shortname||' '||formalname, shortname from aaa_fias_addr_full where aolevel=1 and pareNTguid is null and livestatus = 1
       union all
      select c.aoguid, t.keys||' '||c.formalname
           , t.aline||', '||c.shortname||' '||c.formalname
           , c.shortname
        from t, aaa_fias_addr_full c where t.aoguid = c.pareNTguid and c.livestatus = 1
      )
select *
  from t
;
Table created

select count(*) from aaa_fias_AO_lines;

  COUNT(*)
----------
   1282495

create index aaa_fias_AO_lines$DR on aaa_fias_AO_lines(keys) INDEXTYPE IS ctxsys.context;
Index created

set timing on

select aoguid, atyp, aline from aaa_fias_AO_lines
where contains(keys,'Ленина AND Москва', 1) > 0
order by score(1) desc
;

AOGUID                               ATYP       ALINE
------------------------------------ ---------- --------------------------------------------------------------------------------
0faa0cfa-dfe8-4f5a-a001-2727a41d7f21 ул         г Москва, г Зеленоград, ул Ленина
4350977e-e152-4018-a33d-b13143bbecda ул         г Москва, п Толстопальцево, ул Ленина
7a8015ad-a3eb-4fd0-b4c4-c34ef55bb294 ул         г Москва, п Внуковское, п Мичуринец, ул Ленина
fdbcc75b-1ce8-4eec-b790-33a268df37ab ул         г Москва, п Кокошкино, дп Кокошкино, ул Ленина
427d5fbf-f53c-43ee-a768-48a5cd49caf5 ул         г Москва, п Внуковское, п Минвнешторга, ул Ленина
f168f4da-a379-46df-b4ce-0cf421ad7475 ул         г Москва, п Краснопахорское, с Красная Пахра, ул Ленина
2417419d-a891-41b5-a9c4-7018283d01e3 ул         г Москва, п Внуковское, п дск Мичуринец, ул Ленина

7 rows selected
Executed in 0,057 seconds

select aoguid, atyp, aline
  from aaa_fias_AO_lines
 where contains(keys,'Москва AND Ленин%', 1) > 0
 order by score(1) desc
;

AOGUID                               ATYP       ALINE
------------------------------------ ---------- --------------------------------------------------------------------------------
b05ce965-3bb0-4495-87f4-5eed877d3382 ул         г Москва, ул Юных Ленинцев
fdbcc75b-1ce8-4eec-b790-33a268df37ab ул         г Москва, п Кокошкино, дп Кокошкино, ул Ленина
91ab1cb1-d0a4-489c-9182-9dfbabcd9e2b ул         г Москва, ул Лениногорская
9c3e9392-0324-4d21-9cf5-70076f1b5e15 пр-кт      г Москва, пр-кт Ленинградский
c5fec714-04f5-4cb3-89d8-d7cec97116e6 ш          г Москва, ш Ленинградское
62d9bfcb-278d-48e6-ba60-c23e9776d305 ул         г Москва, ул Ленинская Слобода
5f2a1243-a57b-418e-baee-ff76f4993b45 пр-кт      г Москва, пр-кт Ленинский
12bf2472-62ee-4db6-b998-565141e7a9d1 ул         г Москва, ул Ленинские Горы
0faa0cfa-dfe8-4f5a-a001-2727a41d7f21 ул         г Москва, г Зеленоград, ул Ленина
051ce76a-0a0f-4234-a11b-dfa9b85bf6f8 снт        г Москва, п Воскресенское, снт Ленинское Знамя
e703d5fd-4655-48c9-8768-51a3818ebab1 тер        г Москва, п Воскресенское, тер СНТ Ленинское Знамя
4350977e-e152-4018-a33d-b13143bbecda ул         г Москва, п Толстопальцево, ул Ленина
6880778d-fab1-4a86-998e-40d0e2fdffcb тер        обл Ленинградская, р-н Тосненский, пгт Ульяновка, тер 656км а/м дороги Москва-СП
7a8015ad-a3eb-4fd0-b4c4-c34ef55bb294 ул         г Москва, п Внуковское, п Мичуринец, ул Ленина
2417419d-a891-41b5-a9c4-7018283d01e3 ул         г Москва, п Внуковское, п дск Мичуринец, ул Ленина
427d5fbf-f53c-43ee-a768-48a5cd49caf5 ул         г Москва, п Внуковское, п Минвнешторга, ул Ленина
f168f4da-a379-46df-b4ce-0cf421ad7475 ул         г Москва, п Краснопахорское, с Красная Пахра, ул Ленина
87674309-4a67-4fc3-9071-b9c6d70993b7 тер        г Москва, тер Ленинские Горы

18 rows selected
Executed in 0,274 seconds

SQL> 
10 авг 18, 17:43    [21638220]     Ответить | Цитировать Сообщить модератору
 Re: Перенос символа из конца ячейки в начало.  [new]
Vadim5432
Member

Откуда: Россия
Сообщений: 17960
YouIm
Есть столбец City указывается как: 'Москва г'
Нужно вывести 'г Москва', а ещё лучше 'г. Москва.'
Как это можно сделать?


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

Или сидеть и копаться, пытаясь автоматизировать бардак. В результате получив автоматизированный бардак.
10 авг 18, 22:19    [21638369]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить