पहले अक्षर को बड़ा करें। माई एसक्यूएल


110

क्या किसी को MySQL parlance में इस TSQL के बराबर पता है?

मैं प्रत्येक प्रविष्टि के पहले अक्षर को कैपिटल करने की कोशिश कर रहा हूं।

UPDATE tb_Company SET CompanyIndustry = UPPER(LEFT(CompanyIndustry, 1))
+ SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))

जवाबों:


275

यह लगभग समान है, आपको बस + ऑपरेटर के बजाय CONCAT () फ़ंक्शन का उपयोग करने के लिए बदलना होगा:

UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)), 
                             SUBSTRING(CompanyIndustry, 2));

यह चालू करेंगे helloकरने के लिए Hello, wOrLdकरने के लिए WOrLd, BLABLAकरने के लिए BLABLA, आदि आप अपर-केस के पहले अक्षर चाहते हैं और लोअर केस अन्य, तुम बस के लिए उपयोग LCASE समारोह है:

UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)), 
                             LCASE(SUBSTRING(CompanyIndustry, 2)));

ध्यान दें कि UPPER और UCASE यही काम करते हैं।


1
धन्यवाद - वही किया जो मुझे चाहिए था। मैं यह उल्लेख करना भूल गया कि मुझे पहले मामले को कम करने की आवश्यकता है। धन्यवाद
चिन

55

अपरकेस फर्स्ट लेटर के लिए उत्कृष्ट उत्तर पहले अक्षर के लिए एक संपूर्ण स्तंभ स्ट्रिंग का केवल कैपिटलाइज़ेशन महान काम करता है ।।

लेकिन क्या होगा अगर आप टेबल कॉलम के तार में हर शब्द के पहले अक्षर को ऊपर करना चाहते हैं ?

उदाहरण के लिए: "एब्बेविल हाई स्कूल"

मैं Stackoverflow में इस का जवाब नहीं मिला था। उपरोक्त उदाहरण के लिए एक ठोस समाधान प्रदान करने के लिए मुझे Google में मिले कुछ उत्तरों को एक साथ करना था। यह एक देशी फ़ंक्शन नहीं है, लेकिन एक उपयोगकर्ता ने फ़ंक्शन बनाया जो MySQL संस्करण 5+ की अनुमति देता है।

यदि आपके पास MySQL पर सुपर / व्यवस्थापक उपयोगकर्ता स्थिति है या आपके अपने कंप्यूटर पर स्थानीय mysql इंस्टॉलेशन है तो आप एक FUNCTION (एक संग्रहीत प्रक्रिया की तरह) बना सकते हैं जो आपके डेटाबेस में बैठता है और भविष्य में किसी भी हिस्से पर सभी SQL क्वेरी में उपयोग किया जा सकता है db।

मेरे द्वारा बनाया गया फ़ंक्शन मुझे इस नए फ़ंक्शन का उपयोग करने की अनुमति देता है जिसे मैंने "UC_Script" कहा था जैसे कि MySQL के मूल कार्यों में बनाया गया है ताकि मैं इस तरह एक पूर्ण स्तंभ अपडेट कर सकूं:

UPDATE Table_name
SET column_name = UC_Words(column_name) 

फ़ंक्शन कोड सम्मिलित करने के लिए, मैंने फ़ंक्शन बनाते समय MySQL मानक सीमांकक (;) को बदल दिया, और फिर फ़ंक्शन निर्माण स्क्रिप्ट के बाद इसे वापस सामान्य पर रीसेट कर दिया। मैं व्यक्तिगत रूप से भी चाहता था कि आउटपुट UTF8 CHARSET में भी हो।

क्रिया निर्माण =

DELIMITER ||  

CREATE FUNCTION `UC_Words`( str VARCHAR(255) ) RETURNS VARCHAR(255) CHARSET utf8 DETERMINISTIC  
BEGIN  
  DECLARE c CHAR(1);  
  DECLARE s VARCHAR(255);  
  DECLARE i INT DEFAULT 1;  
  DECLARE bool INT DEFAULT 1;  
  DECLARE punct CHAR(17) DEFAULT ' ()[]{},.-_!@;:?/';  
  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 ; 

यह एक स्ट्रिंग के भीतर कई शब्दों पर बड़े अक्षरों में एक आउटपुट आउटपुट ट्रीटमेंट का काम करता है।

मान लें कि आपके MySQL लॉगिन उपयोगकर्ता के पास पर्याप्त विशेषाधिकार हैं - यदि नहीं, और आप अपनी टेबल को बदलने के लिए अपनी व्यक्तिगत मशीन पर एक अस्थायी DB स्थापित नहीं कर सकते हैं, तो अपने साझा होस्टिंग प्रदाता से पूछें कि क्या वे आपके लिए यह फ़ंक्शन सेट करेंगे।


4
CHARSET utf8_general_ciको CHARSET utf8(कम से कम 5.7 पर) बदला जाना चाहिए
मैनुअल

@ManuelDallaLana वास्तव में आप त्रुटि प्राप्त कर सकते हैं Illegal mix of collations for operation 'concat'इसलिए मुझे लगता है कि बस चार्ज को ठीक करें या इसे हटा दें और इसे डिफ़ॉल्ट रूप से बनाएं।
अल-मोताफ़र

@ एलेजैंड्रो यह उत्तर स्ट्रिंग में प्रत्येक शब्द के पहले अक्षर को कैपिटल करता है। प्रश्न और स्वीकृत उत्तर केवल स्ट्रिंग में पहले अक्षर को कैपिटलाइज़ करते हैं। वे दोनों सुपर सहायक उत्तर हैं, लेकिन विभिन्न उपयोग के मामलों के लिए।
लियाम

एक त्रुटि है, आपको चारसेट के साथ "डिक्लेयर" की घोषणा करनी चाहिए "DECCHARE s VARCHAR (255) CHARSET utf8;" या आप कुछ पात्रों को ढीला कर देंगे। वैसे भी इस समाधान के लिए धन्यवाद :-)
Jérôme Herry

और 'ग' भी: "DECLARE c CHAR (1) CHARSET utf8;"
जेरोमे हेर्री

17

आप के संयोजन का उपयोग कर सकते हैं UCASE(), MID()और CONCAT():

SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names;

यह अन्य सभी पत्रों को कम नहीं करता है। कोशिश करेंSELECT CONCAT(UCASE(MID('TEST',1,1)),MID('TEST',2));
vladkras


5

http://forge.mysql.com/tools/tool.php?id=201

यदि कॉलम में 1 से अधिक शब्द हैं, तो यह नीचे दिखाए गए अनुसार काम नहीं करेगा। ऊपर उल्लिखित यूडीएफ ऐसे मामले में मदद कर सकता है।

mysql> select * from names;
+--------------+
| name         |
+--------------+
| john abraham | 
+--------------+
1 row in set (0.00 sec)

mysql> SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names;
+--------------+
| name         |
+--------------+
| John abraham | 
+--------------+
1 row in set (0.00 sec)

या शायद यह एक मदद करेगा ...

https://github.com/mysqludf/lib_mysqludf_str#str_ucwords




1

एक समारोह बनाएँ:

CREATE DEFINER=`root`@`localhost` FUNCTION `UC_FIRST`(`oldWord` VARCHAR(255)) 

RETURNS varchar(255) CHARSET utf8

RETURN CONCAT( UCASE( LEFT(oldWord, 1)), LCASE(SUBSTRING(oldWord, 2)))

समारोह का उपयोग करें

UPDATE tbl_name SET col_name = UC_FIRST(col_name);

1

अगर कोई अंतरिक्ष से अलग हर शब्द को भुनाने की कोशिश करे ...

CREATE FUNCTION response(name VARCHAR(40)) RETURNS VARCHAR(200) DETERMINISTIC
BEGIN
   set @m='';
   set @c=0;
   set @l=1;
   while @c <= char_length(name)-char_length(replace(name,' ','')) do
      set @c = @c+1;
      set @p = SUBSTRING_INDEX(name,' ',@c);
      set @k = substring(name,@l,char_length(@p)-@l+1);
      set @l = char_length(@k)+2;
      set @m = concat(@m,ucase(left(@k,1)),lcase(substring(@k,2)),' ');
   end while;
   return trim(@m); 
END;
CREATE PROCEDURE updateNames()
BEGIN
  SELECT response(name) AS name FROM names;
END;

परिणाम

+--------------+
| name         |
+--------------+
| Abdul Karim  | 
+--------------+



0
 select  CONCAT(UCASE(LEFT('CHRIS', 1)),SUBSTRING(lower('CHRIS'),2));

उपरोक्त कथन का उपयोग पहले अक्षर CAPS के लिए किया जा सकता है और निचले मामले के रूप में आराम किया जा सकता है।


-1

उस्स एगो सिमोस अस्सिम;)

DELIMITER $$
DROP FUNCTION IF EXISTS `uc_frist` $$
CREATE FUNCTION `uc_frist` (str VARCHAR(200)) RETURNS varchar(200)
BEGIN
    set str:= lcase(str);
    set str:= CONCAT(UCASE(LEFT(str, 1)),SUBSTRING(str, 2));
    set str:= REPLACE(str, ' a', ' A');
    set str:= REPLACE(str, ' b', ' B');
    set str:= REPLACE(str, ' c', ' C');
    set str:= REPLACE(str, ' d', ' D');
    set str:= REPLACE(str, ' e', ' E');
    set str:= REPLACE(str, ' f', ' F');
    set str:= REPLACE(str, ' g', ' G');
    set str:= REPLACE(str, ' h', ' H');
    set str:= REPLACE(str, ' i', ' I');
    set str:= REPLACE(str, ' j', ' J');
    set str:= REPLACE(str, ' k', ' K');
    set str:= REPLACE(str, ' l', ' L');
    set str:= REPLACE(str, ' m', ' M');
    set str:= REPLACE(str, ' n', ' N');
    set str:= REPLACE(str, ' o', ' O');
    set str:= REPLACE(str, ' p', ' P');
    set str:= REPLACE(str, ' q', ' Q');
    set str:= REPLACE(str, ' r', ' R');
    set str:= REPLACE(str, ' s', ' S');
    set str:= REPLACE(str, ' t', ' T');
    set str:= REPLACE(str, ' u', ' U');
    set str:= REPLACE(str, ' v', ' V');
    set str:= REPLACE(str, ' w', ' W');
    set str:= REPLACE(str, ' x', ' X');
    set str:= REPLACE(str, ' y', ' Y');
    set str:= REPLACE(str, ' z', ' Z');
    return  str;
END $$
DELIMITER ;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.