2014-04-22 35 views
0
StringA 
StringB 
StringC 
StringD 

我串接上述4串下方使用替換一個連接字符串,在DB2

StringA||' '||StringB||' '||StringC||' '||StringD 

給出我希望用上述串聯字符串替換,從而替代由單一雙空格空間。我有類似的東西

REPLACE((StringA||' '||StringB||' '||StringC||' '||StringD), ' ',' ') 

但是,上述邏輯沒有提供給我結果。

但是,如果我只是將它應用於StringA和StringB,它工作正常。我們如何才能使它成爲完整的字符串?

+0

哪個版本的DB2?它提供給你什麼?你確定你有實際_spaces_?有許多不同的空白字符。如果你不需要這個數據庫端,也許可以在應用層進行替換 - 許多語言對此有更好的支持/庫。你已經接受的答案似乎不適用於你的陳述的數據庫 - 它實際上是否工作? –

+0

你的SQL看起來正確。只是在最後沒有雙空格:'',''(似乎是重新格式化) – smoore4

回答

0

嘗試正則表達式:

regexp_replace(String1||''||String2||.....||Stringn, '[ ]+', ' ') 
+0

'regexp_replace'似乎是一個** Oracle **函數,但問題是標記爲DB2 ....可以我得到這方面的文件,請嗎?據我所知,DB2 _still_沒有原生的正則表達式。 –

+0

@ Clockwork-Muse我同意DB2並不需要regexp_replqce,但它在使用xQuery時有正則表達式:http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw。 xml.doc/doc/xqrregexp.html – AngocA

+0

@AngocA - 同意 - 我想我沒有考慮'本地',因爲我雖然xQuery默認情況下不是。或者其他的東西。那麼,因爲我從來沒有使用它,所以我一直在忘記它... #sigh#.... –

0

首先要做的大概是:

REPLACE((TRIM(StringA)||' '||TRIM(StringB)||' '||TRIM(StringC)||' '||TRIM(StringD)), ' ',' ') 

應該處理時,尾隨空曠的結果,對多個空間的子串的所有情況。之後,你只會擔心原始的四個字符串是否包含三個或更多空格的子字符串。如果是這種情況,我們可能需要更多地瞭解所有四個字符串列的定義。

+0

我剛剛在問題中格式化了代碼塊,它已經顯示REPLACE的第二個參數是實際上是''''(兩個空格),僅供參考。 –

+0

@AndriyM我應該注意到,我建議的修改只有一個空間。我沒有驗證,因爲我從TS中複製過來,只是添加了TRIM()。不知何故,複製/粘貼成功的原始問題沒有! (我編輯了我的建議添加了第二個空格。) – user2338816

相關問題