जवाबों:
यह लगभग समान है, आपको बस + ऑपरेटर के बजाय 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 यही काम करते हैं।
अपरकेस फर्स्ट लेटर के लिए उत्कृष्ट उत्तर पहले अक्षर के लिए एक संपूर्ण स्तंभ स्ट्रिंग का केवल कैपिटलाइज़ेशन महान काम करता है ।।
लेकिन क्या होगा अगर आप टेबल कॉलम के तार में हर शब्द के पहले अक्षर को ऊपर करना चाहते हैं ?
उदाहरण के लिए: "एब्बेविल हाई स्कूल"
मैं 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 स्थापित नहीं कर सकते हैं, तो अपने साझा होस्टिंग प्रदाता से पूछें कि क्या वे आपके लिए यह फ़ंक्शन सेट करेंगे।
CHARSET utf8_general_ci
को CHARSET utf8
(कम से कम 5.7 पर) बदला जाना चाहिए
Illegal mix of collations for operation 'concat'
इसलिए मुझे लगता है कि बस चार्ज को ठीक करें या इसे हटा दें और इसे डिफ़ॉल्ट रूप से बनाएं।
आप के संयोजन का उपयोग कर सकते हैं 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));
mysql> SELECT schedule_type AS Schedule FROM ad_campaign limit 1;
+----------+
| Schedule |
+----------+
| ENDDATE |
+----------+
1 row in set (0.00 sec)
mysql> SELECT CONCAT(UCASE(MID(schedule_type,1,1)),LCASE(MID(schedule_type,2))) AS Schedule FROM ad_campaign limit 1;
+----------+
| Schedule |
+----------+
| Enddate |
+----------+
1 row in set (0.00 sec)
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_mid
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)
या शायद यह एक मदद करेगा ...
यह अच्छी तरह से काम कर रहा है।
UPDATE state SET name = CONCAT(UCASE(LEFT(name, 1)), LCASE(SUBSTRING(name, 2)));
UPDATE tb_Company SET CompanyIndustry = UCASE(LEFT(CompanyIndustry, 1)) +
SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))
अगर कोई अंतरिक्ष से अलग हर शब्द को भुनाने की कोशिश करे ...
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 |
+--------------+
यह अच्छी तरह से काम करना चाहिए:
UPDATE tb_Company SET CompanyIndustry =
CONCAT(UPPER(LEFT(CompanyIndustry, 1)), SUBSTRING(CompanyIndustry, 2))
UPDATE users
SET first_name = CONCAT(UCASE(LEFT(first_name, 1)),
LCASE(SUBSTRING(first_name, 2)))
,last_name = CONCAT(UCASE(LEFT(last_name, 1)),
LCASE(SUBSTRING(last_name, 2)));
उस्स एगो सिमोस अस्सिम;)
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 ;