উত্তর:
এটি প্রায় একইরকম, আপনাকে কেবল + অপারেটরের পরিবর্তে কনক্যাট () ফাংশনটি ব্যবহার করতে হবে:
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 একই কাজ করে।
আপারকেস জন্য Vincents চমৎকার উত্তর প্রথম পত্র প্রথম চিঠি জন্য কাজ করে মহান শুধুমাত্র একটি সম্পূর্ণ কলামে স্ট্রিং এর ক্যাপিটালাইজেশন ..
তবে আপনি যদি কোনও টেবিল কলামের স্ট্রিংগুলিতে প্রতিটি শব্দের প্রথম অক্ষর বড় হাতের অক্ষরে রাখতে চান ?
যেমন: "অ্যাবেভিল হাই স্কুল"
স্ট্যাকওভারফ্লোতে আমি এর কোনও উত্তর পাইনি। উপরের উদাহরণটির একটি দৃ solution় সমাধান দেওয়ার জন্য গুগলে আমি পেয়েছি এমন কয়েকটি উত্তর আমাকে একত্রে আবদ্ধ করতে হয়েছিল। এটি কোনও নেটিভ ফাংশন নয় তবে একটি ব্যবহারকারী তৈরি ফাংশন যা মাইএসকিউএল 5+ সংস্করণ মঞ্জুরি দেয়।
আপনার যদি মাইএসকিউএলে সুপার / অ্যাডমিন ব্যবহারকারীর স্থিতি থাকে বা আপনার নিজের কম্পিউটারে একটি স্থানীয় মাইএসকিএল ইনস্টলেশন থাকে আপনি একটি ফাংশন তৈরি করতে পারেন (সঞ্চিত পদ্ধতির মতো) যা আপনার ডাটাবেসে বসে থাকে এবং ভবিষ্যতের যে কোনও অংশে এসকিউএল কোয়েরিতে ব্যবহার করা যেতে পারে ডিবি।
আমি তৈরি করা ফাংশনটি আমাকে এই নতুন ফাংশনটি ব্যবহারের অনুমতি দেয় যা আমি "ইউসি_ওয়ার্ডস" ডেকেছিলাম যেমন মাইএসকিউএল-এর দেশীয় ফাংশনগুলিতে নির্মিত যেমন আমি এর মতো একটি সম্পূর্ণ কলাম আপডেট করতে পারি:
UPDATE Table_name
SET column_name = UC_Words(column_name)
ফাংশন কোডটি সন্নিবেশ করানোর জন্য, আমি ফাংশনটি তৈরি করার সময়ই মাইএসকিউএল স্ট্যান্ডার্ড ডিলিমিটার (;) পরিবর্তন করেছি এবং তারপরে ফাংশন তৈরির স্ক্রিপ্টের পরে এটিকে আবার স্বাভাবিক অবস্থায় পুনরায় সেট করব। আমি ব্যক্তিগতভাবেও চেয়েছিলাম আউটপুটটিও ইউটিএফ 8 চ্যারসেটে হয়।
ফাংশন সৃষ্টি =
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 ;
এটি স্ট্রিংয়ের মধ্যে একাধিক শব্দের উপরে বড় হাতের অক্ষরের আউটপুট তৈরি করে works
আপনার মাইএসকিউএল লগইন ইউজারনেমটির যথেষ্ট সুবিধা রয়েছে তা ধরে নিচ্ছেন - যদি না হয় এবং আপনি আপনার টেবিলগুলিকে রূপান্তর করতে আপনার ব্যক্তিগত মেশিনে একটি অস্থায়ী ডিবি স্থাপন করতে পারেন না, তবে আপনার ভাগ করা হোস্টিং সরবরাহকারীকে জিজ্ঞাসা করুন যে তারা আপনার জন্য এই ফাংশনটি সেট করবে কিনা।
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)));
কেউ যদি প্রতিটি শব্দের স্থান দিয়ে আলাদা করে মূলধন করার চেষ্টা করে ...
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 ;