仅从 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,但从快速搜索来看,substr
或 regex_substr
似乎都可以工作,而且任何一个都一样有效作为另一个,这些似乎是解决问题的唯一真正选择。也许 Oracle 大师会通过告诉我们get_first_letter_of_every_word_please
函数来证明我们都错了;-)
@Mike,谢谢,实际上这是一个有效的答案:在 Oracle 中定义您自己的函数。
@AJ 和 @Mike...这根本不是一个有效的答案...您可以看到已接受的答案。以上是关于仅从 varchar 字段中选择单词的首字母的主要内容,如果未能解决你的问题,请参考以下文章