MySQL-এ VARCHAR কলামে ডট সমাহিত সংখ্যা (যেমন '10.5', '20.5') স্ট্রিং হিসেবে সর্ট হলে লেক্সিকোগ্রাফিক্যালি হয় (১০.৫, ১১, ২০...।)। সঠিক সংখ্যাসূচক সর্টিং için CAST(... AS DECIMAL) ব্যবহার করুন।
টেবিল এবং ডেটা
CREATE TABLE DemoTable (
Value VARCHAR(20)
);
INSERT INTO DemoTable VALUES('20'), ('10.5'), ('11'), ('10'), ('20.5');
স্ট্রিং সর্ট (ভুল)
SELECT * FROM DemoTable ORDER BY Value;
10, 10.5, 11, 20, 20.5 -- লেক্সিকোগ্রাফিক্যাল (স্ট্রিং)
সঠিক সর্ট: CAST AS DECIMAL
SELECT * FROM DemoTable
ORDER BY CAST(Value AS DECIMAL) ASC;
ফলাফল
+-------+
| Value |
+-------+
| 10 |
| 10.5 |
| 11 |
| 20 |
| 20.5 |
+-------+
CAST vs CONVERT
CAST(Value AS DECIMAL(10,2)) -- ANSI স্ট্যান্ডার্ড
CONVERT(Value, DECIMAL(10,2)) -- MySQL এক্সটেনশন
DECIMAL(10,2)— ১০ ডিজিট মোট, ২ ডেসিমেল প্লেস- প্রিসিশন/স্কেল না দিলে ডিফল্ট DECIMAL(10,0) = ইন্টিজার
পারফরম্যান্স টিপ
বড় টেবিলে প্রতিবার CAST করা ধীর। কম্পিউটেড কলাম বা সাপারেট নмериক কলাম রাখুন:
ALTER TABLE DemoTable ADD ValueNum DECIMAL(10,2) GENERATED ALWAYS AS (CAST(Value AS DECIMAL(10,2))) STORED;
CREATE INDEX idx_valnum ON DemoTable(ValueNum);