ভিন্ন ফরম্যাটে সংরক্ষিত তারিখ স্ট্রিং (যেমন '10/12/2010') থেকে বছর বের করে শর্তানুযায়ী রেকর্ড আপডেট করতে STR_TO_DATE() এবং YEAR() ফাংশন সংমিশ্রণ ব্যবহার করা হয়।
টেবিল ও ডেটা তৈরি
mysql> CREATE TABLE DemoTable1924 (
UserName VARCHAR(20),
UserJoiningDate VARCHAR(40)
);
mysql> INSERT INTO DemoTable1924 VALUES
('Chris', '10/12/2010'),
('David', '20/01/2011'),
('Mike', '20/01/2010'),
('Carol', '26/04/2013');
আপডেটের আগে
mysql> SELECT * FROM DemoTable1924;
+----------+-----------------+ | UserName | UserJoiningDate | +----------+-----------------+ | Chris | 10/12/2010 | | David | 20/01/2011 | | Mike | 20/01/2010 | | Carol | 26/04/2013 | +----------+-----------------+
আপডেট কোয়ারী: ২০১০ সালের রেকর্ডগুলোর UserName 'Robert' করা
mysql> UPDATE DemoTable1924
SET UserName = 'Robert'
WHERE YEAR(STR_TO_DATE(UserJoiningDate, '%d/%m/%Y')) = 2010;
ফাংশন ব্যাখ্যা:
STR_TO_DATE(str, '%d/%m/%Y')— স্ট্রিংকে DATE টাইপে রূপান্তর (দিন/মাস/বছর)।YEAR(date)— তারিখ থেকে বছর বের করে।
আউটপুট: Query OK, 2 rows affected (0.00 sec)
আপডেটের পর
mysql> SELECT * FROM DemoTable1924;
+----------+-----------------+ | UserName | UserJoiningDate | +----------+-----------------+ | Robert | 10/12/2010 | | David | 20/01/2011 | | Robert | 20/01/2010 | | Carol | 26/04/2013 | +----------+-----------------+
সাধারণ ডেট ফরম্যাট স্পেসিফায়ার
| স্পেসিফায়ার | অর্থ | উদাহরণ |
|---|---|---|
| %d | দিন (০১-৩১) | 10 |
| %m | মাস (০১-১২) | 12 |
| %Y | বছর (৪ অঙ্ক) | 2010 |
| %y | বছর (২ অঙ্ক) | 10 |
পারফরম্যান্স টিপ
বড় টেবিলে ফাংশন-ভিত্তিক WHERE ক্লজ ইন্ডেক্স ব্যবহার করতে পারে না। সমাধান:
- গেনারেটেড কলাম + ইন্ডেক্স (MySQL 5.7+)
- অথবা তারিখ সংরক্ষণের জন্য নেটিভ DATE/DATETIME টাইপ ব্যবহার করুন।