2010-02-01 135 views
3

我在一次採訪中被問到,來自oracle sql.this的一個問題似乎是一個簡單的問題,但我無法回答。有人幫忙嗎?只選擇varchar字段中的第一個字母

如果有像「紐約是一個美麗的城市」在一個柱子的字符串。

select column_name from table_name; 

將導致

newyork is a beautiful city 

什麼是給輸出與所有的第一個字母串所需的查詢。 即輸出應該是

niabc 
+2

只是出於好奇:是否有一個原因「a」被排除在輸出之外(即爲什麼不是「niabc」?),或者是面試問題的一部分,以刪除文章? – 2010-02-01 04:39:30

+3

如果你真的需要這樣做,SQL完全是它的錯誤工具。雖然你可以編寫一些單一的遞歸查詢,但你可以用另一種語言的簡單循環來實現同樣的事情(可能快得多),你可以在用戶定義的函數中使用它。 – lins314159 2010-02-01 04:42:15

+0

對不起,我的錯誤...我忘了:) :) – Vijay 2010-02-01 04:42:31

回答

6

只要你不在乎是否有保持輸出的情況下,這可以非常簡單地完成,而無需遞歸:

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

TRANS 
----- 
NIABC 

SQL> 

如果句子中包含數字,標點等那麼我們將不得不將這些字符添加到第一個替換字符串中,這可能會非常乏味。

+0

這是非常優秀的答案,這就是我正在... ...一個簡單的SQL查詢:)非常感謝。 – Vijay 2010-02-01 08:44:19

1

也許這將涉及使用功能substr

+0

這是無效的原因? – 2010-02-01 04:37:32

+0

只有當你知道你需要的角色位置時纔會使用substr。但你不知道這個詞究竟在哪裏。並添加到這...這不應該是一個答案,評價者應該是一個comment.so -1從我 – Vijay 2010-02-01 04:38:06

+0

你有我的upvote,@AJ :-)我從來沒有使用Oracle,但從快速搜索它似乎'substr'或'regex_substr'都可以工作,任何一個都可以和另一個一樣有效,而這些似乎是解決問題的唯一真正選擇。也許一位Oracle大師會告訴我們關於'get_first_letter_of_every_word_please'函數的所有錯誤;-) – 2010-02-01 04:48:56

5

答案是使用REGEX_SUBSTR

查看文檔here, 和一個關閉示例here

+0

+1對我來說很新鮮。感謝提示。 – 2010-02-01 04:45:22

2

您可以使用描述爲here的分割函數(用空格替換逗號),以便按空格拆分句子。然後,你可以像AJ那樣使用substr函數,因爲split的結果可以讓你從char 1開始到每個「piece」的char 2。

它涉及到substr畢竟是吧?

PS。我寧願在上面的層中處理結果,而不是在查詢過程中。但那是我。

相關問題