দশমিক সংখ্যা (যেমন '100.50') কে পূর্ণসংখ্যা অংশ এবং দশমিক অংশে আলাদা করতে SUBSTRING_INDEX() এবং CAST() ফাংশন কম্বাইন করা হয়।
টেবিল ও ডেটা তৈরি
mysql> CREATE TABLE DemoTable1951 (Value1 VARCHAR(20));
mysql> INSERT INTO DemoTable1951 VALUES ('100.50'), ('70.90'), ('1000.55');
ডেটা যাচাই
mysql> SELECT * FROM DemoTable1951;
+---------+ | Value1 | +---------+ | 100.50 | | 70.90 | | 1000.55 | +---------+
কোয়েরি: দশমিক বিন্দু দিয়ে ভাগ করা
mysql> SELECT
CAST(SUBSTRING_INDEX(Value1, '.', 1) AS UNSIGNED) AS FirstValue,
CAST(SUBSTRING_INDEX(Value1, '.', -1) AS UNSIGNED) AS SecondValue
FROM DemoTable1951;
ফাংশন ব্যাখ্যা:
SUBSTRING_INDEX(str, delim, count)—count > 0হলে বাম পাশ থেকেcountটি ডিলিমিটার পর্যন্ত;count < 0হলে ডান পাশ থেকে।SUBSTRING_INDEX(Value1, '.', 1)— প্রথম '.' এর বামপাশ (পূর্ণসংখ্যা অংশ)।SUBSTRING_INDEX(Value1, '.', -1)— শেষ '.' এর ডানপাশ (দশমিক অংশ)।CAST(... AS UNSIGNED)— স্ট্রিংকে নন-নেগেটিভ ইন্টিজারে রূপান্তর।
আউটপুট:
+------------+-------------+ | FirstValue | SecondValue | +------------+-------------+ | 100 | 50 | | 70 | 90 | | 1000 | 55 | +------------+-------------+
সতর্কতা এবং সীমাবদ্ধতা
- দশমিক বিন্দু না থাকলে (যেমন '100') —
SecondValueপুরো স্ট্রিং '100' হবে। - একাধিক দশমিক বিন্দু থাকলে (যেমন '1.2.3') —
count=-1শেষ বিন্দুর ডানপাশ নেবে। - নেগেটিভ সংখ্যা (যেমন '-10.5') —
UNSIGNEDকাস্ট করলে ভুল ফলাফল দেবে;SIGNEDব্যবহার করুন।
উন্নত পদ্ধতি: REGEXP_SUBSTR (MySQL 8.0+)
SELECT
CAST(REGEXP_SUBSTR(Value1, '^[0-9]+') AS UNSIGNED) AS int_part,
CAST(REGEXP_SUBSTR(Value1, '[0-9]+$') AS UNSIGNED) AS frac_part
FROM DemoTable1951;
সর্বোত্তম অনুশীলন
দশমিক সংখ্যা সংরক্ষণের জন্য সবসময় DECIMAL(p,s) বা FLOAT/DOUBLE টাইপ ব্যবহার করুন — স্ট্রিং (VARCHAR) এড়িয়ে চলুন।