我有一个字符串,为了报告/对齐目的,我需要在每个字符后插入一个空格。不幸的是,我必须在SQL中执行它,或者我可以编写格式函数。
e.g。 “abcd123”将其转换为“a b c d 1 2 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)));
这里的评论是列名