函数中的MySQL子字符串不返回空格

时间:2015-08-05 23:16:59

标签: mysql

我有一个用于将文本更改为正确大小写的函数。

CREATE FUNCTION `fpropercasetest` (p_Value VARCHAR(8000))
RETURNS VARCHAR(8000)
BEGIN
DECLARE v_i INT; -- counter
DECLARE v_ProperCaseText VARCHAR(5000);
DECLARE v_Word VARCHAR(1000);
DECLARE v_isWhiteSpace TINYINT(1);
DECLARE v_c CHAR(1);

SET v_Word = '';
SET v_i = 1;
SET v_isWhiteSpace = 1;
SET v_ProperCaseText = '';

SET p_Value = LOWER(p_Value);

WHILE (v_i <= LENGTH(p_Value)+1) DO

    SET v_c = SUBSTRING(p_Value,v_i,1);

    IF v_isWhiteSpace = 1 THEN SET v_c = UPPER(v_c); END IF;

    SET v_isWhiteSpace = CASE WHEN (ASCII(v_c) BETWEEN 48 AND 58) THEN 0
                                    WHEN (ASCII(v_c) BETWEEN 64 AND 90) THEN 0
                                    WHEN (ASCII(v_c) BETWEEN 96 AND 123) THEN 0
                                    ELSE 1 END;

    IF v_isWhiteSpace = 0 THEN
        SET v_Word = CONCAT(v_Word, v_c);
    ELSE
        SET v_ProperCaseText = CONCAT(v_ProperCaseText, v_Word, v_c);
        SET v_Word = '';
    END IF;
    SET v_i = v_i + 1;
END WHILE;
return v_ProperCaseText;
END;

您可以使用以下

进行测试
SELECT fpropercasetest("this is just some text for you to test with");

当我输入带空格的任何文本时,我注意到它没有注册(例如,文本&#34;这是一些文本&#34;它将返回&#34; ThisIsSomeText&#34;它应该返回&#34;这是一些文字&#34;)

我用Visual Studio调试它,发现子字符串只是完全忽略空格,它返回一个空字符串。

我完全被这个难过,任何帮助都将不胜感激。感谢。

2 个答案:

答案 0 :(得分:2)

对于延迟感到抱歉,我在离开工作之前需要注意一些事情,这是我想出的,它做你想做的事情:

FUNCTION `upper_all`(p_Value VARCHAR(8000)) RETURNS varchar(8000) CHARSET latin1
BEGIN
DECLARE pos INT; -- counter
DECLARE result VARCHAR(1000);
SET p_Value = LOWER(p_Value);
SET p_Value = CONCAT(UCASE(LEFT(p_Value, 1)),LCASE(SUBSTRING(p_Value, 2)));
SET pos = LOCATE(' ',p_Value);
SET result = SUBSTR(p_Value,1,LOCATE(' ',p_Value));
SET p_Value = SUBSTR(p_Value FROM pos);
WHILE (pos > 0) DO
    /*SET p_Value = CONCAT(p_Value,UCASE(LEFT(p_Value, pos)),LCASE(SUBSTRING(p_Value, 2)));*/

    SET pos = LOCATE(' ',p_Value);
    IF pos > 0 THEN 
        SET pos = pos + 1;
        SET p_Value = SUBSTR(p_Value FROM pos);
    END IF;
    SET p_Value = CONCAT(UCASE(LEFT(p_Value, 1)),LCASE(SUBSTRING(p_Value, 2)));
    SET result = CONCAT(result,SUBSTR(p_Value,1,LOCATE(' ',p_Value)));
END WHILE;
SET result = CONCAT(result,p_Value);
return result;
END

我没有时间为你评论,它应该是不言自明的。它可以使用一点清理并稍微优化代码。

答案 1 :(得分:0)

ini_set('session.save_handler', 'files');