2016-03-15 2 views
1

Мне нужно запустить еженедельный извлечение и обновить значение столбца поиска из внешней базы данных. Проблема я столкнулся в том, что мой подстановок x_ids столбцов, содержит строковые значения переменной длины и структуры, т.е.Oracle выберите значение до первого пробела или конца строки

Таблица поиска

x_ids 
------ 
CHE00r 
NWA048 
HAM54O1A 
STR191O1C 

Моя проблема заключается в том, что некоторые из значений, выбранных для обновления также включают в себя пространство и скобки после значения. т.е. выше STR191O1C может отражать STR191O1C (250)

Я попытался следующим выбрать для своего обновления: -

select substr(b.x_ids,1,instr(b.x_ids,' ',1,1) - 1) 
from lookup_tab a, external_tab b 
where a.site_id = B.SITE_ID 
and a.zone_id = b.zone_id 

Это удаляет скобку номера и предоставляет значение я искал, но не возвращает значений для других линий, у которых нет скобок или пробелов. Мне нужно вернуть все значения до конца строки, если нет пробелов или до места, если оно существует.

ответ

3

Вы можете легко настроить вашу логику, чтобы справиться с этим, добавив пробел в строку перед поиском для пространства:

select substr(b.x_ids, 1, instr(b.x_ids || ' ', ' ', 1, 1) - 1) 
from lookup_tab a join 
    external_tab b 
    on a.site_id = B.SITE_ID and a.zone_id = b.zone_id 
+0

Спасибо, что делает именно то, что мне нужно - – MatteoS

+0

Обновлено, чтобы отразить это решение – MatteoS

0

Вы можете сделать это с помощью регулярных выражений:

SELECT REGEXP_SUBSTR(b.x_ids, '^(.*?)($|)', 1, 1, NULL, 1) 
FROM lookup_tab a 
     JOIN external_tab b 
     ON a.site_id = B.SITE_ID and a.zone_id = b.zone_id 

Или с помощью CASE заявление:

SELECT CASE WHEN INSTR(b.x_ids, ' ') = 0 THEN b.x_ids 
      ELSE SUBSTR(b.x_ids, 1, INSTR(b.x_ids, ' ') - 1) 
      END 
FROM lookup_tab a 
     JOIN external_tab b 
     ON a.site_id = B.SITE_ID and a.zone_id = b.zone_id 

Или:

SELECT SUBSTR(
     b.x_ids, 
     1, 
     CASE WHEN INSTR(b.x_ids, ' ') > 0 THEN INSTR(b.x_ids, ' ') - 1 END 
     ) 
FROM lookup_tab a 
     JOIN external_tab b 
     ON a.site_id = B.SITE_ID and a.zone_id = b.zone_id 
Смежные вопросы