Извлекать текст перед третьим - «тире» в SQL - PullRequest
1 голос
/ 08 декабря 2010

Не могли бы вы помочь получить этот код для sql.

У меня есть имя столбца INFO_01, который содержит такую ​​информацию, как D10-52247-479-245 HALL SO и я хотел бы только извлечь D10-52247-479

если вы видите, что я хочу часть текста перед третьим

Спасибо LD

Ответы [ 4 ]

1 голос
/ 08 декабря 2010

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

with temp as (
    select 'D10-52247-479-245 HALL SO' test_string from dual)
select test_string,
       instr(test_string,1,3) third_dash,
       substr(test_string,1,instr(test_string,1,3)-1) result
  from temp
);
1 голос
/ 08 декабря 2010

Вот простое утверждение, которое должно работать:

SELECT SUBSTR(column, 1, INSTR(column,'-',1,3) ) FROM table;

0 голосов
/ 08 декабря 2010

Использование комбинации SUBSTR и INSTR вернет то, что вы хотите:

SELECT SUBSTR('D10-52247-479-245', 0, INSTR('D10-52247-479-245', '-', -1, 1)-1) AS output
  FROM DUAL

Результат:

output
-------------
D10-52247-479

Использование:

SELECT SUBSTR(t.column, 0, INSTR(t.column, '-', -1, 1)-1) AS output
  FROM YOUR_TABLE t

Ссылка:

Приложение

При использовании Oracle10g + вы можетеиспользуйте регулярные выражения через REGEXP_SUBSTR .

0 голосов
/ 08 декабря 2010

Я предполагаю, что MySQL, дайте мне знать, если я здесь не прав. Но, используя SUBSTRING_INDEX , вы можете сделать следующее:

SELECT SUBSTRING_INDEX(column, '-', 3)

EDIT Похоже, что оракул. Похоже, нам, возможно, придется прибегнуть к REGEXP_SUBSTR

SELECT REGEXP_SUBSTR(column, '^((?.*\-){2}[^\-]*)')

Невозможно проверить, поэтому не уверен, какой результат будет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...