Получить строку до символа Oracle SQL - PullRequest
0 голосов
/ 12 апреля 2019

Как получить строку перед символом?

Мне нужно получить строку до ; в Oracle SQL.

Например:

147739 - Blablabla ; Blublublu

Необходимый выход:

147739 - Blablabla

Пока мой код:

SELECT  
    UPPER(CONVERT(REGEXP_REPLACE(SUBSTR(HISTORICO, INSTR(HISTORICO, 'Doc') + 4), 'S/A', 'SA'), 'US7ASCII')) 
FROM 
    GEQ_GL_CONC_CONTABIL_FRETES_V 
WHERE 
    periodo = '$Periodo$' AND livro = 'ESMALTEC_FISCAL'

Я хочу всю строку до ;

Ответы [ 3 ]

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

Мы можем использовать комбинацию SUBSTR и INSTR для достижения этого;

SELECT SUBSTR(FIELD_NAME,1,INSTR(FIELD_NAME,';', 1, 1)-1) FROM TABLE_NAME;

Первый аргумент SUBSTR - это позиция в значении поля, с которой мы хотим начать (1 =в начале), вторым аргументом является длина подстроки, которую мы хотим прочитать, здесь она синонимична позиции ';'-1.

Третий и четвертый аргументы INSTR - с чего начать поиск ';'и количество, которое нас интересует. В нашем примере это начало (1) и первый случай (снова 1).

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

Вы можете попробовать использовать substr () и instr ()

select  SUBSTR(my_col, 0, INSTR(my_col, ';')-1) 
from my_table   

select  SUBSTR(' Blablabla ; Blublublu', 0, INSTR('A Blablabla ; Blublublu', ';')-1) 
from dual 
0 голосов
/ 12 апреля 2019

Несколько альтернатив, использующих REGEXP Результат каждого решения зависит от того, насколько однородны ваши данные

WITH tbl
AS (
  SELECT '147739 - Blablabla ; Blublublu' str 
    FROM DUAL
)
SELECT TRIM(REGEXP_SUBSTR(str, '([[:alnum:]]|-| )*')) AS SOLUTION_1
,      REGEXP_SUBSTR(str, '[[:digit:]]*( )?(-)?( )?[[:alpha:]]*') AS SOLUTION_2
,      REGEXP_SUBSTR(str, '[[:digit:]]*( |-)*[[:alpha:]]*') AS SOLUTION_3
  FROM tbl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...