2014-09-19 43 views
0

第一個問題,所以提前道歉,如果這是愚蠢的或喧賓奪主,但我已經搜查了大約30分鐘,現在不用我的確切問題的任何地方找到任何提及:Oracle SQL - 有沒有更好的方法來連接多個字符串與給定的分隔符?

有沒有一種方法來連接一系列字符串,由給定的分隔符分隔,而不是手動將每列之間的分隔符連接起來?

舉一個具體的例子,我現在有這樣的:

SELECT member_no as Member#, 
(member_gname 
|| ' ' 
|| member_fname) as Name, 
(member_street 
|| ' ' 
|| member_city 
|| ' ' 
|| member_state 
|| ' ' 
|| member_postcode) AS Address, 
member_phone AS Phone, 
TO_CHAR(member_joindate, 'dd-Mon-yyyy') as Joined 
FROM MEMBER; 

它做工精細,準確和產生我想要的輸出,但因爲這是研究我不太關注產出多關注.sql文件本身的可讀性和「最佳實踐」因素。我明白CONCAT()只有兩個參數,所以如果沒有嵌套它們(即使更醜陋,可讀性更低)也不行。我在這裏完全天真地進來,但我希望會有某種神奇的AWESOMECONCAT()類型的函數,它將採用我需要的所有列,以及允許我指定要將它們分開的字符(在這種情況下,一個空間)。有任何想法嗎?

此外,這是一個單獨的問題,不值得單獨發佈,但有什麼辦法可以選擇一個'AS'列,並給它一個名稱,包括空白? E.g'成員#'看起來會更好,而且'加入日期'會更清晰,但是我已經在AS之後嘗試了括號和單引號,並且似乎也沒有與SQL開發者一起飛。

回答

2

我們仍然可以編寫我們自己的AWESOMECONCAT()。不幸的是,Oracle沒有內置的功能。由於連接操作符執行基本的操作。

在別名中使用雙引號,可以使列引用區分大小寫,甚至接受空格。但請注意,對該列/表達式的更多引用需要雙引號和相同的文本。

SELECT member_no as "Member #", 
(member_gname 
|| ' ' 
|| member_fname) as Name, 
(member_street 
|| ' ' 
|| member_city 
|| ' ' 
|| member_state 
|| ' ' 
|| member_postcode) AS Address, 
member_phone AS Phone, 
TO_CHAR(member_joindate, 'dd-Mon-yyyy') as "Join Date" 
FROM MEMBER; 
+0

不知道爲什麼我沒有嘗試雙引號!來自Java/Lua的SQL,單引號/雙引號的東西不斷讓我感動 - 不要讓我開始關於「||」的感受,意味着連接而不是OR ... – Toadfish 2014-09-19 04:50:37

0

有沒有一種方法來連接一系列字符串,通過給定的分隔符分隔,而無需手動將每個柱是串聯之間的分隔符?

從11g起進行連接的最好方法是新的字符串文字技術q'[]'

例如:

select q'[This is a string, 'this is also a string'.]' from dual

+0

* q *運算符用於連接??逗號誤導了你! – 2014-09-19 05:45:58

+0

啊,你說得對。這些是列名而不是文字。它無論如何都需要連接運算符'||'。 – 2014-09-19 05:52:16

相關問題