2009-12-18 75 views
1

我有一個字符串,用於報告/對齊目的我需要在每個字符後面插入一個空格。不幸的是,我將不得不在SQL中執行它,或者我可以編寫格式化函數。如何在字符串中的每個字符之後插入空格MySQL

例如「abcd123」將其轉換爲「a b c d 1 2 3」。

由於這是相當多的行我想知道如何優化它將分析每個字符,並建立一個新的字符串每次?

任何幫助表示讚賞。

謝謝

+0

我很好奇,想知道報告的原因是什麼。 –

+0

REGEXP_REPLACE呢? – Xinus

+0

謝謝Xinus類似的東西首次出現在我的腦海裏。但是我讀到的是MySQL沒有這個功能。我遇到了網站上的用戶定義庫,但不知道如何使用它,這是否意味着我需要將這些庫複製到客戶站點? 任何幫助你可以提供有關它非常感謝。 –

回答

3

這裏有一個快速&髒MySQL的功能,解決您的問題:

delimiter || 
DROP FUNCTION IF EXISTS concat_whitespace|| 
CREATE FUNCTION concat_whitespace(x longtext) RETURNS longtext 
LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA 
BEGIN 
DECLARE len INT UNSIGNED; 
DECLARE erg LONGTEXT; 
SET len = LENGTH(x); 
REPEAT 
SET erg = CONCAT_WS(' ',SUBSTRING(x,len,1),erg); 
SET len = len - 1; 
UNTIL len < 1 END REPEAT; 
return erg; 
END; 
|| 

現在試試這個:

Select concat_whitespace("abcd123") 

基本上返回 「ABCD 1 2 3」

此功能爲每個角色循環並連接一個空間。方向是從頭到尾,這就保存了一個計數器變量。

我沒有帶做過性能測試,皮草一定要以某種方式可以優化這個..

+0

感謝RngTng爲我打破僵局。我想我可以把它推進。 –

+0

@BT .:如果你能夠改善這個功能,我很樂意看到結果。 – Zach

1

我不建議在SQL中存儲不必要的空格。這隻會浪費空間。

如何編寫一個自定義檢索方法,該方法將在每個字符之後使用空格返回數據庫中的所有字符串?

+0

是的謝謝你的建議。實際上,生成的字符串將不會存儲到數據庫中,而會用於報告。如果我要編寫一個函數,該函數將字符串值作爲參數並將空間放在每個參數中。可以做到嗎? –

+0

它當然可以。您使用哪種語言生成此報告? – tinkertime

+0

它是一種專有的報告工具,幾乎不支持格式化/操縱從數據庫檢索的字符串。因此查詢返回的值必須在字符之間有一個空格。 最終報告具有嚴格的格式和對齊問題。我知道這很糟糕,因爲它是一個遺留系統。在顯示之前,不要奢求使用高級語言處理字符串。 感謝球員的時間,努力和答案。 –

0
update tablename set comment= trim(concat(substr(comment, 1,1),space(1),substr(comment, 2,1),space(1),substr(comment, 3,1),space(1),substr(comment, 4,1),space(1),substr(comment, 5,1),space(1),substr(comment, 6,1),substr(comment, 7))); 

這裏的評論是列名

相關問題