如何在字符串MySQL中的每个字符后插入空格

时间:2009-12-18 14:06:38

标签: mysql

我有一个字符串,为了报告/对齐目的,我需要在每个字符后插入一个空格。不幸的是,我必须在SQL中执行它,或者我可以编写格式函数。

e.g。 “abcd123”将其转换为“a b c d 1 2 3”。

由于它涉及相当多的行,我想知道每次解析每个字符并构建一个新字符串的优化程度如何?

感谢任何帮助。

由于

3 个答案:

答案 0 :(得分: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")

返回     “a b c d 1 2 3”

此函数基本上为每个字符循环并连接一个空格。方向是从头到尾,它保存了一个计数器变量。

我没有做过任何性能测试,确保你能以某种方式优化它......

答案 1 :(得分:1)

我不建议在SQL中存储不必要的空格。这只会浪费空间。

如何编写一个自定义检索方法,它将在每个字符后面用空格返回数据库中的所有字符串?

答案 2 :(得分: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)));

这里的评论是列名