2014-04-03 2 views
0

을 반환합니다. mysql의 select 쿼리는 대문자로 된 문자열을 반환 할 가능성이 있습니까? 소문자로 반환SQL select 쿼리는 대문자로 된

SELECT LCASE(name) FROM Person; 

을 할 것입니다해야합니다 선택한 쿼리 필드를 가져 오는 예를 들어

이 방법에 의해

name 
------- 
mark miguel 
john 
james 
... 

를 반환합니다, 나는 표 Person 이름과 필드 name있다 대문자로 모든 값을 얻었습니다 ...

name 
------- 
MARK MIGUEL 
JOHN 
JAMES 
... 

제 질문은, 단지 대문자를 반환 LCASE()와 동일한 기능을 가진 선택 쿼리가 무엇입니까? 예를 들어 반환 값은 다음과 같습니다.

name 
------- 
Mark Miguel 
John 
James 
... 
+0

를 참조 기능을 사용하면 의미합니까 [제목 케이스 (http://en.wikipedia.org/wiki/Title_case#Title_case) ? –

+0

[이 질문에 봐] (http://stackoverflow.com/questions/12364086/how-can-i-achieve-initcap-functionality-in-mysql). – collapsar

+0

예 ... 단어의 첫 글자가 대문자이고 나머지가 소문자 인 것 같은 ... – gadss

답변

1

DROP FUNCTION IF EXISTS proper; 
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(18) DEFAULT '()[]{},.-_\'[email protected];:?/'; -- David Rabby & Lenny Erickson added \' 
    SET s = LCASE(str); 
    WHILE i <= LENGTH(str) DO -- Jesse Palmer corrected from < to <= for last char 
    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 ; 
select proper("d'arcy"); 
+------------------+ 
| proper("d'arcy") | 
+------------------+ 
| D'Arcy   | 
+------------------+ 

는 "대문자"으로 http://www.artfulsoftware.com/infotree/queries.php#122