Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

क्या MySQL डेटा को टाइटल केस में बदलने का कोई आसान तरीका है?

संपादित करें

यूरेका! सचमुच मेरा पहला SQL फ़ंक्शन। कोई वारंटी नहीं दी गई। उपयोग करने से पहले अपने डेटा का बैकअप लें। :)

सबसे पहले, निम्नलिखित फ़ंक्शन को परिभाषित करें:

DROP FUNCTION IF EXISTS lowerword;
SET GLOBAL  log_bin_trust_function_creators=TRUE; 
DELIMITER |
CREATE FUNCTION lowerword( str VARCHAR(128), word VARCHAR(5) )
RETURNS VARCHAR(128)
DETERMINISTIC
BEGIN
  DECLARE i INT DEFAULT 1;
  DECLARE loc INT;

  SET loc = LOCATE(CONCAT(word,' '), str, 2);
  IF loc > 1 THEN
    WHILE i <= LENGTH (str) AND loc <> 0 DO
      SET str = INSERT(str,loc,LENGTH(word),LCASE(word));
      SET i = loc+LENGTH(word);
      SET loc = LOCATE(CONCAT(word,' '), str, i);
    END WHILE;
  END IF;
  RETURN str;
END;
|
DELIMITER ;

यह शब्द की सभी घटनाओं को str में कम कर देगा।

फिर इस संशोधित उचित कार्य को परिभाषित करें:

DROP FUNCTION IF EXISTS tcase; 
SET GLOBAL  log_bin_trust_function_creators=TRUE; 
DELIMITER | 
CREATE FUNCTION tcase( str VARCHAR(128) ) 
RETURNS VARCHAR(128)
DETERMINISTIC
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;

  SET s = lowerword(s, 'A');
  SET s = lowerword(s, 'An');
  SET s = lowerword(s, 'And');
  SET s = lowerword(s, 'As');
  SET s = lowerword(s, 'At');
  SET s = lowerword(s, 'But');
  SET s = lowerword(s, 'By');
  SET s = lowerword(s, 'For');
  SET s = lowerword(s, 'If');
  SET s = lowerword(s, 'In');
  SET s = lowerword(s, 'Of');
  SET s = lowerword(s, 'On');
  SET s = lowerword(s, 'Or');
  SET s = lowerword(s, 'The');
  SET s = lowerword(s, 'To');
  SET s = lowerword(s, 'Via');

  RETURN s; 
END; 
| 
DELIMITER ; 

उपयोग

सत्यापित करें कि यह अपेक्षा के अनुरूप काम करता है:

SELECT tcase(title) FROM table;

इसका इस्तेमाल करें:

UPDATE table SET title = tcase(title);

स्रोत:http://www.artfulsoftware.com/infotree/queries .php?&bw=1070#122



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL वर्कबेंच ट्यूटोरियल - RDBMS टूल के लिए एक व्यापक गाइड

  2. MySQL 8.0 में नई विश्लेषणात्मक विंडो कार्यों की समीक्षा

  3. मैसकल:उस तालिका से पंक्तियों का चयन करें जो दूसरे में नहीं हैं

  4. MySQL पहले 10 परिणाम छोड़ें

  5. MySQL में कॉलम मान में स्ट्रिंग को कैसे प्रीपेड करें?