我有一個字符串,用於報告/對齊目的我需要在每個字符後面插入一個空格。不幸的是,我將不得不在SQL中執行它,或者我可以編寫格式化函數。如何在字符串中的每個字符之後插入空格MySQL
例如「abcd123」將其轉換爲「a b c d 1 2 3」。
由於這是相當多的行我想知道如何優化它將分析每個字符,並建立一個新的字符串每次?
任何幫助表示讚賞。
謝謝
我有一個字符串,用於報告/對齊目的我需要在每個字符後面插入一個空格。不幸的是,我將不得不在SQL中執行它,或者我可以編寫格式化函數。如何在字符串中的每個字符之後插入空格MySQL
例如「abcd123」將其轉換爲「a b c d 1 2 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」
此功能爲每個角色循環並連接一個空間。方向是從頭到尾,這就保存了一個計數器變量。
我沒有帶做過性能測試,皮草一定要以某種方式可以優化這個..
感謝RngTng爲我打破僵局。我想我可以把它推進。 –
@BT .:如果你能夠改善這個功能,我很樂意看到結果。 – Zach
我不建議在SQL中存儲不必要的空格。這隻會浪費空間。
如何編寫一個自定義檢索方法,該方法將在每個字符之後使用空格返回數據庫中的所有字符串?
是的謝謝你的建議。實際上,生成的字符串將不會存儲到數據庫中,而會用於報告。如果我要編寫一個函數,該函數將字符串值作爲參數並將空間放在每個參數中。可以做到嗎? –
它當然可以。您使用哪種語言生成此報告? – tinkertime
它是一種專有的報告工具,幾乎不支持格式化/操縱從數據庫檢索的字符串。因此查詢返回的值必須在字符之間有一個空格。 最終報告具有嚴格的格式和對齊問題。我知道這很糟糕,因爲它是一個遺留系統。在顯示之前,不要奢求使用高級語言處理字符串。 感謝球員的時間,努力和答案。 –
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)));
這裏的評論是列名
我很好奇,想知道報告的原因是什麼。 –
REGEXP_REPLACE呢? – Xinus
謝謝Xinus類似的東西首次出現在我的腦海裏。但是我讀到的是MySQL沒有這個功能。我遇到了網站上的用戶定義庫,但不知道如何使用它,這是否意味着我需要將這些庫複製到客戶站點? 任何幫助你可以提供有關它非常感謝。 –