我在一次採訪中被問到,來自oracle sql.this的一個問題似乎是一個簡單的問題,但我無法回答。有人幫忙嗎?只選擇varchar字段中的第一個字母
如果有像「紐約是一個美麗的城市」在一個柱子的字符串。
select column_name from table_name;
將導致
newyork is a beautiful city
什麼是給輸出與所有的第一個字母串所需的查詢。 即輸出應該是
niabc
我在一次採訪中被問到,來自oracle sql.this的一個問題似乎是一個簡單的問題,但我無法回答。有人幫忙嗎?只選擇varchar字段中的第一個字母
如果有像「紐約是一個美麗的城市」在一個柱子的字符串。
select column_name from table_name;
將導致
newyork is a beautiful city
什麼是給輸出與所有的第一個字母串所需的查詢。 即輸出應該是
niabc
只要你不在乎是否有保持輸出的情況下,這可以非常簡單地完成,而無需遞歸:
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查詢:)非常感謝。 – Vijay 2010-02-01 08:44:19
也許這將涉及使用功能substr?
這是無效的原因? – 2010-02-01 04:37:32
只有當你知道你需要的角色位置時纔會使用substr。但你不知道這個詞究竟在哪裏。並添加到這...這不應該是一個答案,評價者應該是一個comment.so -1從我 – Vijay 2010-02-01 04:38:06
你有我的upvote,@AJ :-)我從來沒有使用Oracle,但從快速搜索它似乎'substr'或'regex_substr'都可以工作,任何一個都可以和另一個一樣有效,而這些似乎是解決問題的唯一真正選擇。也許一位Oracle大師會告訴我們關於'get_first_letter_of_every_word_please'函數的所有錯誤;-) – 2010-02-01 04:48:56
您可以使用描述爲here的分割函數(用空格替換逗號),以便按空格拆分句子。然後,你可以像AJ那樣使用substr函數,因爲split的結果可以讓你從char 1開始到每個「piece」的char 2。
它涉及到substr畢竟是吧?
PS。我寧願在上面的層中處理結果,而不是在查詢過程中。但那是我。
只是出於好奇:是否有一個原因「a」被排除在輸出之外(即爲什麼不是「niabc」?),或者是面試問題的一部分,以刪除文章? – 2010-02-01 04:39:30
如果你真的需要這樣做,SQL完全是它的錯誤工具。雖然你可以編寫一些單一的遞歸查詢,但你可以用另一種語言的簡單循環來實現同樣的事情(可能快得多),你可以在用戶定義的函數中使用它。 – lins314159 2010-02-01 04:42:15
對不起,我的錯誤...我忘了:) :) – Vijay 2010-02-01 04:42:31