只选字段的首字母。

问题描述 投票:5回答:5

在一次面试中,我被问到一个来自oracle sql的问题,这似乎是一个简单的问题,但我不知道如何回答,有人能帮助我吗?

如果有像 "newyork is a beautiful city "这样的字符串在一个colum中。

select column_name from table_name;

会导致

newyork is a beautiful city

查询需要什么,才能将输出结果作为一个字符串,包含所有的首字母,也就是说,输出结果应该是...。

niabc
sql oracle sqlplus
5个回答
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>

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


6
投票

答案是使用 REGEX_SUBSTR.

参见文档 此处以及一个近似的例子 此处.


2
投票

你可以使用下面描述的分割函数 此处 (用空格代替逗号),以便将句子按空格分割。然后,你可以像AJ说的那样使用substr函数,因为分割的结果可以让你从每一个 "片段 "的第1字符到第2字符开始。

这毕竟涉及到substr,对吧?

PS. 我宁愿在上面一层处理结果,而不是在查询过程中。但这是我的想法。


1
投票

也许这将涉及到使用函数 子串?

© www.soinside.com 2019 - 2024. All rights reserved.