MySQL-এ বিল্ট-ইন ফাংশন নেই কমা-বিচ্ছিন্ন স্ট্রিংয়ের যোগফল বের করার জন্য। কিন্তু স্টোরড ফাংশন লিখে এটি সহজে করা যায়।
উদাহরণ: কাস্টম ফাংশন তৈরি ও ব্যবহার
১. টেবিল তৈরি করুন
mysql> CREATE TABLE DemoTable (
-> ListOfValues VARCHAR(50)
-> );
৩. ডেটা ইনসার্ট করুন
mysql> INSERT INTO DemoTable VALUES('20,10,40,50,60');
৪. কাস্টম ফাংশন তৈরি করুন
mysql> DELIMITER $$
mysql> CREATE FUNCTION totalSumInCommaSeparatedString(input VARCHAR(50))
-> RETURNS INT
-> DETERMINISTIC
-> NO SQL
-> BEGIN
-> DECLARE totalSum INT DEFAULT 0;
-> WHILE INSTR(input, ',') > 0 DO
-> SET totalSum = totalSum + SUBSTRING_INDEX(input, ',', 1);
-> SET input = MID(input, INSTR(input, ',') + 1);
-> END WHILE;
-> RETURN totalSum + input;
-> END $$
mysql> DELIMITER ;
৫. ফাংশন ব্যবহার করে যোগফল বের করুন
mysql> SELECT totalSumInCommaSeparatedString(ListOfValues) AS TotalSum FROM DemoTable;
৬. ফলাফল
+----------+
| TotalSum |
+----------+
| 180 |
+----------+
ফাংশন ব্যাখ্যা:
INSTR(input, ',')- কমার পজিশন বের করে।SUBSTRING_INDEX(input, ',', 1)- প্রথম কমার আগের সংখ্যা।MID(input, ...)- কমার পরের অংশ নতুন ইনপুট হিসেবে নেয়।- লুপ চলতে থাকে যতক্ষণ কমা পাওয়া যায়। শেষ সংখ্যা লুপের বাইরে যোগ হয়।
সতর্কতা: এটি শুধু পূর্ণসংখ্যার জন্য কাজ করে। দশমিক সংখ্যা হলে DECIMAL রিটার্ন টাইপ এবং CAST ব্যবহার করতে হবে। বড় ডেটাসেটের জন্য সেট-বейসড আপরোচ (JSON_TABLE, রিকার্সিভ CTE) ভালো।