MySQL-এ VARCHAR কলামে সংরক্ষিত সংখ্যাসূচক স্ট্রিং থেকে সর্বোচ্চ মান বের করতে CAST(... AS UNSIGNED) দিয়ে নাম্বারিক কনভার্সন করুন, তারপর MAX() ফাংশন প্রয়োগ করুন।
সমস্যা: স্ট্রিং হিসেবে MAX
SELECT MAX(value) FROM varchar_table; -- '999999' > '1235667' (লেক্সিকোগ্রাফিক্যালি)
সমাধান: CAST + MAX
CREATE TABLE find_max_varchar (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
value VARCHAR(200)
);
INSERT INTO find_max_varchar (value) VALUES
('200'), ('1000'), ('899474'), ('39474'), ('4958');
ক্যোয়ারি
SELECT MAX(CAST(value AS UNSIGNED)) AS max_numeric_value
FROM find_max_varchar;
ফলাফল
+-------------------+
| max_numeric_value |
+-------------------+
| 899474 |
+-------------------+
অন্যান্য এগ리게শন
SELECT
MIN(CAST(value AS UNSIGNED)) AS min_val,
MAX(CAST(value AS UNSIGNED)) AS max_val,
AVG(CAST(value AS UNSIGNED)) AS avg_val,
SUM(CAST(value AS UNSIGNED)) AS sum_val
FROM find_max_varchar;
WHERE-এ CAST (ফিল্টারিং)
SELECT * FROM find_max_varchar
WHERE CAST(value AS UNSIGNED) > 50000;
পারফরম্যান্স: জেনারেটেড কলাম + ইনডেক্স (MySQL 5.7+)
ALTER TABLE find_max_varchar
ADD COLUMN value_num INT GENERATED ALWAYS AS (CAST(value AS UNSIGNED)) STORED,
ADD INDEX idx_value_num (value_num);
-- এখন দ্রুত ক্যোয়ারি
SELECT MAX(value_num) FROM find_max_varchar;
SELECT * FROM find_max_varchar WHERE value_num > 50000;
দ্রষ্টব্য
UNSIGNEDব্যবহার করুন নন-নেগেটিভ সংখ্যার জন্য (বড় রেঞ্জ)SIGNEDব্যবহার করুন নেগেটিভ সংখ্যা থাকতে পারলেDECIMALব্যবহার করুন দশমিক সংখ্যার জন্য- খালি স্ট্রিং
''কাস্ট করলে0হয় — ফিল্টার করুন:WHERE value != '' AND CAST(...)
MySQL 8.0.17+ : CAST আউটপুট টাইপ
SELECT CAST('123' AS UNSIGNED INTEGER); -- স্পেসিফিক টাইপ
SELECT CAST('123.45' AS DECIMAL(10,2));