5

我在一次采访中被问到,一个来自 oracle sql 的问题。这似乎是一个简单的问题,但我不知道如何回答。有人可以帮忙吗?

如果列中有“纽约是一座美丽的城市”之类的字符串。

select column_name from table_name;

将导致

newyork is a beautiful city

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

niabc
4

4 回答 4

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>

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

于 2010-02-01T06:12:47.670 回答
6

答案是使用REGEX_SUBSTR

请参阅此处的文档和此处的相关示例。

于 2010-02-01T04:42:52.693 回答
2

您可以使用此处描述的拆分功能(用空格替换逗号),以便按空格拆分句子。然后,您可以像 AJ 所说的那样使用 substr 函数,因为拆分的结果将允许您从每个“片段”的 char 1 到 char 2 开始。

毕竟它涉及到 substr,对吧?

PS。我宁愿在上面的一层中处理结果,而不是在查询期间。但这就是我。

于 2010-02-01T04:43:07.310 回答
1

也许它会涉及使用函数substr

于 2010-02-01T04:33:57.007 回答