SQL-запрос для выбора слова из 100 столбцов - PullRequest
2 голосов
/ 25 апреля 2019

У меня есть 100 столбцов в таблице Oracle, как это Sh. North Miladhunmadulu - Shaviyani Atoll.Мне нужен запрос, чтобы выбрать только Shaviyani из вышеперечисленного.Пожалуйста, помогите мне.Мне нужно выбрать данные после - и до Atoll word.

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Пожалуйста, используйте SUBSTR и INSTR, как указано ниже

SELECT SUBSTR('Sh. North Miladhunmadulu - Shaviyani Atoll',instr ('Sh. North Miladhunmadulu - Shaviyani Atoll','-')+1,
        ((instr ('Sh. North Miladhunmadulu - Shaviyani Atoll','Atoll')-1) - instr ('Sh. North Miladhunmadulu - Shaviyani Atoll','-'))) as OUTPUT
    FROM dual;

Здесь выводится Fiddle

Замените строку именем столбца, а dual именем таблицы.

1 голос
/ 25 апреля 2019

Если вы говорите о строках, а не о столбцах. Вы можете добиться этого, используя несколько CTE через запятую.

В приведенном ниже запросе есть таблица 3 cte. Стол t0 будет перемещать положение '-' с помощью функции charindex. Затем, используя функцию charindex, мы можем найти следующий пробел, который должен быть после слова Shaviyani. Как видите, после '-' есть место сразу. Поэтому мы добавим +2 к t0.position к таблице t1, которая используется для поиска позиции следующего пробела. Таблица t3 получит конечный результат, используя функцию substring.

declare @string nvarchar(50)='Sh. North Miladhunmadulu - Shaviyani Atoll';

with t0 AS (select charindex('-',@string) pos, @string name),
     t1 AS (select charindex(' ',@string,pos+2) pos,name from t0),
     t2 AS (select substring(@string,t0.pos+1,t1.pos - t0.pos) name
            from t0
            inner join t1 on t0.name = t1.name )

select * from t2

выход

name
--------------------------------------------------
 Shaviyani 
...