выберите только первые буквы слов из поля varchar - PullRequest
5 голосов
/ 01 февраля 2010

Меня спросили в интервью, вопрос от оракула sql.Это казалось простым вопросом, но я понятия не имел, на что ответить. Кто-нибудь может помочь?

если в столбце есть строка типа "Нью-Йорк - прекрасный город".

select column_name from table_name;

приведет

newyork is a beautiful city

какой запрос необходим для вывода в виде строки со всеми первыми буквами. то есть выход должен быть

niabc

Ответы [ 4 ]

7 голосов
/ 01 февраля 2010

При условии, что вы не заботитесь о сохранении выходных данных, это можно сделать довольно просто, без необходимости рекурсии:

SQL> select
  2      translate(
  3            initcap('newyork is a BEAUTIFUL city')
  4               , 'ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz'
  5               , 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  6              )
  7  from dual
  8  /

TRANS
-----
NIABC

SQL>

Если предложение содержит цифры, знаки препинания и т. Д., То мы должны добавить эти символы в первую замещающую строку, что может быть довольно утомительным.

6 голосов
/ 01 февраля 2010

В ответе используется REGEX_SUBSTR .

См. Документы здесь , и близкий пример здесь .

2 голосов
/ 01 февраля 2010

Вы можете использовать функцию разделения, описанную здесь (замена запятой на пробел), чтобы разделить предложение на его пробелы. Затем вы могли бы использовать функцию substr, как говорит AJ, потому что результат разделения позволил бы вам начинать с char 1 до char 2 каждого «кусочка».

В конце концов, он включает в себя substr, верно?

PS. Я предпочел бы обработать результат на уровне выше, а не во время запроса. Но это я.

1 голос
/ 01 февраля 2010

Может быть, это будет связано с использованием функции substr ?

...