仅从 varchar 字段中选择单词的首字母

Posted

技术标签:

【中文标题】仅从 varchar 字段中选择单词的首字母【英文标题】:select only first letters of words from a varchar field 【发布时间】:2010-02-01 04:29:16 【问题描述】:

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

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

select column_name from table_name;

结果

newyork is a beautiful city

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

niabc

【问题讨论】:

只是出于好奇:是否有原因将“a”从输出中排除(即为什么不是“niabc”?),或者是采访问题的一部分也删除了文章? 如果你真的需要这样做,SQL 是完全错误的工具。虽然您可以编写一些单一的递归查询,但您可以使用另一种语言的简单循环来实现相同的目的(可能也快得多),您可以在用户定义的函数中插入。 对不起,我的错误...我忘记了a:) @lins...你可能是对的...但也许面试官是在测试我的逻辑能力,并没有考虑你所说的表现。我也同意这可以做到使用其他可用工具轻松实现。 @Am:同意。我的观点是,这不是最好通过基于集合的逻辑来完成的事情。 @benjamin 按钮:这似乎是记忆数据库附带的功能的问题。如果你还不知道这个函数,SQL 的方法是通过递归查询,在这种情况下我会先提到有更好的选择,然后只有在面试官坚持的情况下才跳转到 SQL,因为它需要我即使我有一个要测试的数据库,也要花半个小时来编写递归查询。 【参考方案1】:

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

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

TRANS
-----
NIABC

SQL>

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

【讨论】:

这是一个非常好的答案,这就是我正在寻找的......一个简单的 sql 查询:)非常感谢。【参考方案2】:

答案是使用 REGEX_SUBSTR

请参阅文档here, 和一个紧密的例子here。

【讨论】:

【参考方案3】:

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

毕竟涉及到 substr 对吧??

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

【讨论】:

【参考方案4】:

也许会涉及到使用函数substr?

【讨论】:

有什么原因这无效? substr 只有在你知道你需要的字符的位置时才会被使用。但你不知道这个词到底在哪里。并添加到这个......这不应该是一个答案,它应该是一个comment.so -1来自我 你得到了我的支持,@AJ :-) 我从未使用过 Oracle,但从快速搜索来看,substrregex_substr 似乎都可以工作,而且任何一个都一样有效作为另一个,这些似乎是解决问题的唯一真正选择。也许 Oracle 大师会通过告诉我们get_first_letter_of_every_word_please 函数来证明我们都错了;-) @Mike,谢谢,实际上这是一个有效的答案:在 Oracle 中定义您自己的函数。 @AJ 和 @Mike...这根本不是一个有效的答案...您可以看到已接受的答案。

以上是关于仅从 varchar 字段中选择单词的首字母的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Perl 中将字符串中每个单词的首字母大写?

将一句英文中每个单词的首字母大写,其余字母小写。

如何提取句子中第 n 个单词的首字母?

将数据框列中每个单词的首字母大写

使用word打英文单词,怎么才能把英文的单词的首字母由默认的大写变成小写?

将每个单词的首字母大写而不改变当前的大写字母