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

时间:2010-02-01 04:29:17

标签: sql oracle sqlplus

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

如果在列中有“newyork is a beautiful city”这样的字符串。

select column_name from table_name;

将导致

newyork is a beautiful city

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

niabc

4 个答案:

答案 0 :(得分: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>

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

答案 1 :(得分:6)

答案是使用 REGEX_SUBSTR

查看文档here, 以及一个紧密的例子here

答案 2 :(得分:2)

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

毕竟它涉及到substr,对吧?

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

答案 3 :(得分:1)

可能涉及使用函数substr