2016-09-29 2 views
0

Здравствуйте, Мне нужна помощь в следующем сценарии.Oracle SubStr для поля описания

Существует таблица с Company_Cd, Company_Name и все мне нужно, это первые 2 слова из названия компании, если она имеет более 3-х слов и 1 слово, если оно имеет 2 слова

Пример:

Company_Cd  Company_Name 
123   ABC SOLUTIONS INC 
345   XYZ GLOBAL TECH SOLUTIONS 
899   NOWHERE COMPANY INC LTD 
654   QSW SOLUTIONS 

Желаемая Выход:

Company_Cd  Company_Name 
123   ABC SOLUTIONS 
345   XYZ GLOBAL 
899   NOWHERE COMPANY 
654   QSW 
+0

Я пробовал использовать instr с функцией substr. но по какой-то причине он не работает –

+1

Покажите, что вы пробовали (внесите в вопрос), чтобы люди могли объяснить, почему он не работает, и помочь вам исправить это. – Mat

ответ

0

Вы также можете использовать регулярные выражения:

SELECT Company_Cd, 
     regexp_replace(company_name,'(((\w+)\s){'||CASE WHEN regexp_count(trim(company_name),' ') IN (0,1) THEN 1 
                 ELSE 2 
                 END||'}).*','\1') 
FROM customer; 
1

Вы можете использовать функцию INSTR, чтобы найти 1-й и 2-й вхождение пространства, а затем использовать SubStr соответственно:

SELECT c.company_name, 
    (
    CASE 
    WHEN instr(c.company_name,' ',1,2) >0 THEN SUBSTR(c.company_name, 1, instr(c.company_name,' ',1,2)) 
    WHEN instr(c.company_name,' ',1,2) =0 AND instr(c.company_name,' ',1,1) >0  THEN SUBSTR(c.company_name, 1, instr(c.company_name,' ',1,1)) 
    ELSE c.company_name 
    END) 
FROM customer c 
+0

Удивительный и он работает !! Большое вам спасибо –

0

Вы найдете ниже запрос для вашего использования:

SELECT Company_Cd, IF((length(Company_Name) - length(replace(Company_Name, ' ', '')) + 1) >= 3, SUBSTRING_INDEX(Company_Name, ' ', 2), IF((length(Company_Name) - length(replace(Company_Name, ' ', '')) + 1) >= 2, SUBSTRING_INDEX(Company_Name, ' ', 1), Company_Name)) as result FROM company LIMIT 20; 
+0

Я получаю синтаксис Ошибка –

+0

В Oracle нет «IF». – mathguy

0
select company_cd, 
     trim(substr(company_name, 1, instr(company_name || ' ', ' ', 1, 2) - 1)) 
from company_tbl; 

начинает это решение, добавив два пробела в конце название компании; то он находит положение второго пространства в этой расширенной строке, он удаляет второе пространство и все после него - и затем он обрезает оставшееся пространство в конце (нужно только, если название компании было одним словом, если все названия компаний было гарантировано как минимум два слова, решение было бы еще проще).

Смежные вопросы