从varchar字段中仅选择单词的第一个字母

Vij*_*jay 5 sql oracle sqlplus

我在接受采访时被问到来自oracle sql的一个问题.这似乎是一个简单的问题,但我没有回答的答案.有人帮忙吗?

如果在一个列中有像"newyork是一个美丽的城市"的字符串.

select column_name from table_name;
Run Code Online (Sandbox Code Playgroud)

将导致

newyork is a beautiful city
Run Code Online (Sandbox Code Playgroud)

将输出作为包含所有首字母的字符串所需的查询是什么.即,输出应该是

niabc
Run Code Online (Sandbox Code Playgroud)

APC*_*APC 7

如果您不关心维护输出的情况,这可以非常简单地完成而无需递归:

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

TRANS
-----
NIABC

SQL>
Run Code Online (Sandbox Code Playgroud)

如果句子包含数字,标点符号等,那么我们必须将这些字符添加到第一个替换字符串,这可能会变得相当繁琐.


Ami*_*shk 6

答案是使用REGEX_SUBSTR.

请参阅该文档在这里,并密切例子在这里.