2014-12-10 2 views
0

모두MySQL의 적절한 기능

내 연구에서 온라인 코드를 찾을 수 없어서 MySQL의 텍스트를 정리하기 위해 만든 두 가지 기능을 게시하고 있습니다.

첫 번째 함수 인 properword()는 텍스트 문자열을 소문자로 변환하고 첫 번째 단어는 대문자로 변환합니다.

두 번째 함수 proper()는 properword()를 사용하여 텍스트 문자열을 소문자로 변환하고, 전체 중지 다음의 첫 번째 문자를 바꿉니다.

설명 된 기능에 대한 아래의 질문에 대한 답변을 참조하십시오.

답변

0
-- properword() 
-- starts a sentence with an upper case letter, the remaining word is in lower case. 

DROP FUNCTION IF EXISTS properword; 
DELIMITER $$ 
CREATE FUNCTION properword(str text) 
RETURNS TEXT 
BEGIN 
DECLARE s Text; 
DECLARE t Text; 
SET s = UPPER(LEFT(str, 1)); 
SET t = LOWER(RIGHT(str, LENGTH(str)-1)); 
RETURN CONCAT(s,t); 
END; 
$$ 
DELIMITER ; 

-- proper() 
-- corrects a sentence so that the first letter after each full stop is a capital. Otherwise the words are in lower case 

DROP FUNCTION IF EXISTS proper; 
DELIMITER $$ 
CREATE FUNCTION proper(str text) 
-- "hello. world. Thanks!" 
RETURNS TEXT 
BEGIN 

DECLARE m Text; 
DECLARE n Text; 
DECLARE o Text; 
DECLARE p Text; 
DECLARE i INT DEFAULT 1; 
DECLARE j INT DEFAULT 1; 

SET m = properword(str); 
-- m = "Hello. world. thanks!" 
-- length(m) = 21 
WHILE i <= LENGTH(m) DO 
    BEGIN 
SET i = LOCATE(".", str, j); 
IF i > 0 THEN 
-- 1. i = 6 
-- 2. i = 13 
SET n = LEFT(m, i+1); 
-- 1. n= "Hello. " 
-- 2. n = "Hello. World. " 
SET p = UPPER(RIGHT(LEFT(m, i+2), 1)); 
-- 1. p = "W" 
-- 2, p = "T" 
SET o = RIGHT(m, length(m)-i-2); 
-- 1. o = "orld. thanks!" 
-- 2. o = "hanks!" 
SET m = CONCAT(n,p,o); 
-- 1. m = "Hello. World. thanks!" 
-- 2. m = "Hello. World. Thanks!" 
SET j = i + 1; 
-- 1. i = 7 
-- 2. j = 14 
ELSE 
SET i = LENGTH(m) + 1; 
END IF; 
END; 
END WHILE; 
RETURN m; 
END; 
$$ 
DELIMITER; 
0

당신은 MySQL을로 세계에서 가장 인기있는 오픈 소스 데이터베이스 (모든 단어의 첫 글자는 대문자입니다) 항목 제목 케이스를 만들기위한 기능을 것, 자신을 호출하고자 생각합니다. 슬프게도하지 않습니다.

이 내가 그냥 트릭을 할 것입니다 저장 프로 시저/함수를 생성 발견 최적의 솔루션입니다

mysql> 
DROP FUNCTION IF EXISTS properword; 
SET GLOBAL log_bin_trust_function_creators=TRUE; 
DELIMITER | 
CREATE FUNCTION proper(str VARCHAR(128)) 
RETURNS VARCHAR(128) 
BEGIN 
DECLARE c CHAR(1); 
DECLARE s VARCHAR(128); 
DECLARE i INT DEFAULT 1; 
DECLARE bool INT DEFAULT 1; 
DECLARE punct CHAR(17) DEFAULT '()[]{},[email protected];:?/'; 
SET s = LCASE(str); 
WHILE i <= LENGTH(str) DO 
    BEGIN 
SET c = SUBSTRING(s, i, 1); 
IF LOCATE(c, punct) > 0 THEN 
SET bool = 1; 
ELSEIF bool=1 THEN 
BEGIN 
IF c >= 'a' AND c <= 'z' THEN 
BEGIN 
SET s = CONCAT(LEFT(s,i-1),UCASE(c),SUBSTRING(s,i+1)); 
SET bool = 0; 
END; 
ELSEIF c >= '0' AND c <= '9' THEN 
SET bool = 0; 
END IF; 
END; 
END IF; 
SET i = i+1; 
END; 
END WHILE; 
RETURN s; 
END; 
| 
DELIMITER ; 

다음

update table set col = properword(col) 

또는

select properword(col) as properCOl 
from table