- 1 1. හැඳින්වීම
- 2 2. MySQL දිනයේ ක්රියාකාරකම් සඳහා ඔබට අවශ්ය මූලික දැනුම
- 3 3. DATE_ADD ක්රියාකාරකම: මූලික සහ ප්රායෝගික භාවිතය
- 4 4. DATE_SUB ක්රියාවලිය: මූලික සහ ප්රායෝගික භාවිතය
- 5 5. INTERVAL වාක්ය විස්තර සහ එය භාවිතා කරන ආකාරය
- 6 6. ප්රායෝගික උදාහරණ
- 7 7. සටහන් සහ හොඳ පුරුදු
- 8 8. නිතර අසන ප්රශ්න (FAQ)
- 8.1 Q1: DATE_ADD සහ + operator සමඟ INTERVAL භාවිත කිරීමේ වෙනස කුමක්ද?
- 8.2 Q2: DATE_ADD එකවර බහු INTERVAL එකතු කළ හැදියිද?
- 8.3 Q3: MySQL හි දිනයේ ආකෘතිය කෙසේ වෙනස් කළ හැකිද?
- 8.4 Q4: මාස අවසාන දිනයකට මාසයක් එකතු කළහොත් කුමක් වේද?
- 8.5 Q5: කාලකලාප-දැනුම් දිනය ගණනය කිරීම් කෙසේ කළ හැකිද?
- 8.6 Q6: DATE_ADD හි අවලංගු දිනයක් නියම කළහොත් කුමක් වේද?
- 8.7 Q7: අතීත හෝ අනාගත දිනයන් මත පදනම්ව කොන්දේසි සැකසීමට කෙසේද?
- 8.8 Q8: බහු කාලකලාප භාවිතා කරන විට හොඳ පුරුදු මොනවාද?
- 8.9 Q9: MySQL හි දිනය සහ කාලය වෙන්ව පාලනය කළ හැදියිද?
- 8.10 Q10: MySQL හි INTERVAL වාක්යය සහය නොදක්වන ඒකක භාවිතා කළ හැදියිද?
- 9 9. Summary
1. හැඳින්වීම
MySQL යනු වෙබ් යෙදුම් සහ දත්ත ගබඩා කළමනාකරණය සඳහා පුළුල් ලෙස භාවිතා වන RDBMS (Relational Database Management System) එකකි. එහි බොහෝ විශේෂාංග අතර, දිනයේ ක්රියාකාරකම් යනු සංවර්ධකයන් දිනපතා භාවිතා කරන ඉතා වැදගත් ක්රියාකාරකම් අතරින් එකකි. උදාහරණයක් ලෙස, නැවත නැවත සිදුවන මතක් කිරීමන් සකස් කිරීම, නියමිත කාල පරාසයක් තුළ දත්ත ලබා ගැනීම, සහ කාලසටහන් ගණනය කිරීම වැනි දිනයන් සම්බන්ධ අසංඛ්ය අවස්ථා ඇත.
විශේෂයෙන්, දිනයන් එකතු කිරීම සහ අඩු කිරීම බොහෝ වාරයක් භාවිතා වේ. MySQL DATE_ADD සහ DATE_SUB වැනි පහසු ක්රියාකාරකම්, සහ INTERVAL කොටස සමඟ කාල පරාසය නියම කිරීමේ හැකියාව ලබා දෙයි. මෙයින් ඔබට කේතය කෙටි කරමින්, සංකීර්ණ දිනයේ ගණනයන් කාර්යක්ෂමව සිදු කළ හැකිය.
මෙම ලිපියේ, MySQL හි දිනය එකතු කිරීම සහ අඩු කිරීම පිළිබඳව ආරම්භක‑හිතකාමී ආකාරයෙන් පැහැදිලි කරමු. මූලික භාවිතය සිට උසස් උදාහරණ දක්වා සියල්ල ආවරණය කර, ව්යාපාරික ව්යාපෘතිවල ඔබට භාවිතා කළ හැකි ප්රායෝගික දැනුම ලබා දෙමු. සාමාන්ය ගැටළු සහ අවධානය යොමු කළ යුතු වැදගත් කරුණුද පැහැදිලි කර, දිනයේ සැකසීම පිළිබඳව ඔබට විශ්වාස නැතිවූවත් සුවපහසු ලෙස ඉගෙන ගත හැකි පරිදි ඉදිරිපත් කරමු.
ඔබ මෙම ලිපිය අවසන් කරන විට, MySQL දිනයේ ක්රියාකාරකම් සඳහා අවශ්ය දැනුම සහ ප්රායෝගික තාක්ෂණයන් ඔබට හිමි වන අතර, ඒවා ඔබේම ව්යාපෘතිවල යොදා ගැනීමට හැකි වනු ඇත.
2. MySQL දිනයේ ක්රියාකාරකම් සඳහා ඔබට අවශ්ය මූලික දැනුම
MySQL හි දිනයන් සමඟ වැඩ කරන විට, පළමුව දිනය/කාල දත්ත වර්ග සහ මූලික සංකල්පයන් අවබෝධ කර ගැනීම වැදගත් වේ. මෙම කොටස MySQL දිනයේ ක්රියාකාරකම් සඳහා ඔබට අවශ්ය මූලික දැනුම පැහැදිලි කරයි.
දිනය/කාල දත්ත වර්ග
MySQL දිනයන් සහ කාලයන් සැකසීමට විවිධ දත්ත වර්ග ලබා දෙයි. එක් එක් වර්ගයේ ලක්ෂණ අවබෝධ කර, නිසි ලෙස තේරීම වැදගත් වේ.
- DATE
- දින දර්ශන (වසර, මාස, දිනය) සුරකින්නා.
- ආකෘතිය:
YYYY-MM-DD - උදාහරණය:
2025-01-01 - ඔබට දිනයක් පමණක් අවශ්ය නම් (උදා: උපන්දිනය, නිර්මාණ දිනය) භාවිතා කරන්න.
- DATETIME
- දිනය සහ කාලය සුරකින්නා.
- ආකෘතිය:
YYYY-MM-DD HH:MM:SS - උදාහරණය:
2025-01-01 12:30:45 - දිනය සහ කාලය දෙකම අවශ්ය නම් (උදා: සිදුවීමේ කාල සටහන) භාවිතා කරන්න.
- TIMESTAMP
- UTC (Coordinated Universal Time) මත පදනම් වූ දිනය/කාලය සුරකින්නා, කාල කලාප පරිවර්තනයට සහය දේ.
- ආකෘතිය:
YYYY-MM-DD HH:MM:SS - උදාහරණය:
2025-01-01 12:30:45 - කාල කලාප‑සම්බන්ධ දත්ත අවශ්ය නම් හෝ පද්ධති ලොග් සඳහා භාවිතා කරන්න.
- TIME
- කාල අගය සුරකින්නා.
- ආකෘතිය:
HH:MM:SS - උදාහරණය:
12:30:45 - පූර්ණ කාල අගයක් (උදා: ව්යාපාරික වේලාව) අවශ්ය නම් භාවිතා කරන්න.
- YEAR
- වසර අගය පමණක් සුරකින්නා.
- ආකෘතිය:
YYYY - උදාහරණය:
2025 - වසර මට්ටමේ දත්ත කළමනාකරණය අවශ්ය නම් භාවිතා කරන්න.
දිනය/කාල වර්ග භාවිතා කිරීමේ වැදගත් සටහන්
- කාල කලාප සැකසුම් MySQL පෙරනිමියෙන් සේවාදායකයේ කාල කලාප සැකසුම් භාවිතා කරයි. ඔබේ යෙදුම වෙනත් කාල කලාපයක් භාවිතා කරනවා නම්, දත්ත අසමතුලිතතා සිදු විය හැක. අවශ්ය විට කාල කලාපය පැහැදිලිව සකසන්න.
- අවලංගු දිනයන් සැකසීම පෙරනිමියෙන් MySQL අවලංගු දිනයක් (උදා:
2025-02-30) නිරූපණය කරන විට දෝෂයක් දක්වයි. නමුත් සේවාදායක සැකසුම් අනුව එයNULLහෝ පෙරනිමි අගයක් වෙත පරිවර්තනය විය හැක, එබැවින් ඔබේ සැකසුම් පරීක්ෂා කිරීම අත්යවශ්යයි.
දිනයේ ක්රියාකාරකම් සඳහා සාමාන්ය භාවිතා අවස්ථා
- නිශ්චිත කාල පරාසයක් සඳහා දත්ත ලබා ගැනීම
- උදාහරණය: පසුගිය සතියේ විකුණුම් දත්ත ලබා ගැනීම.
- කාලසටහන් ගණනය
- උදාහරණය: පරිශීලකයෙක් ලියාපදිංචි වූ පසු දින 30කින් දැනුම්දීමක් යැවීම.
- කාලය අවසන් වීමේ දිනයන් කළමනාකරණය
- උදාහරණය: කූපන් කාලය අවසන් වීමේ දිනයන් කළමනාකරණය කිරීම.
මූලික කරුණු සාරාංශය
MySQL දිනයන් සහ කාලයන් සැකසීමට ශක්තිමත් මෙවලම් ලබා දෙයි. දිනය/කාල දත්ත වර්ග අවබෝධ කර, නිසි ලෙස තේරීමෙන් දත්ත ගබඩා සැලසුම සහ විමසුම් කාර්යක්ෂමතාව වැඩිදියුණු කළ හැක. ඊළඟ කොටසෙහි, දිනයේ ක්රියාකාරකම් සඳහා DATE_ADD ක්රියාකාරකම පිළිබඳව තවත් විස්තරාත්මකව බලමු.
3. DATE_ADD ක්රියාකාරකම: මූලික සහ ප්රායෝගික භාවිතය
The MySQL DATE_ADD ක්රියාවලිය යනු දිනයකට නියමිත අන්තරයක් එකතු කිරීමට භාවිතා කරන පහසු මෙවලමකි. මෙම කොටස මූලික භාවිතය සිට ප්රායෝගික උදාහරණ දක්වා සියල්ල පැහැදිලි කරයි.
DATE_ADD යනු කුමක්ද?
DATE_ADD යනු INTERVAL කොටස තුළ නියමිත කාලය ලබා දුන් දිනයකට එකතු කර නව දිනයක් ලබා දේ. දිනයේ ගණනය සරල කිරීම සඳහා මෙය මූලික මෙවලමකි.
මූලික ව්යවස්ථාව:
DATE_ADD(date, INTERVAL value unit)
- date : ක්රියාත්මක වන දිනය හෝ datetime.
- value : එකතු කිරීමට ඇති අගය.
- unit : අන්තර ඒකකය (උදාහරණයක් ලෙස DAY, MONTH, YEAR, HOUR, MINUTE, SECOND).
ලබා ගත හැකි INTERVAL ඒකක
DATE_ADD සමඟ පහත සඳහන් INTERVAL ඒකක භාවිතා කළ හැක.
| Unit | Description |
|---|---|
| SECOND | Seconds |
| MINUTE | Minutes |
| HOUR | Hours |
| DAY | Days |
| WEEK | Weeks |
| MONTH | Months |
| YEAR | Years |
මූලික උදාහරණ
මෙන්න DATE_ADD හි ප්රායෝගික උදාහරණ.
- දින 1ක් පසු ගණනය කරන්න :
SELECT DATE_ADD('2025-01-01', INTERVAL 1 DAY);
ප්රතිඵලය: 2025-01-02
- මාසයක් 1 පසු ගණනය කරන්න :
SELECT DATE_ADD('2025-01-01', INTERVAL 1 MONTH);
ප්රතිඵලය: 2025-02-01
- වසරක් 1 පසු ගණනය කරන්න :
SELECT DATE_ADD('2025-01-01', INTERVAL 1 YEAR);
ප්රතිඵලය: 2026-01-01
- පැය 3ක් පසු ගණනය කරන්න :
SELECT DATE_ADD('2025-01-01 12:00:00', INTERVAL 3 HOUR);
ප්රතිඵලය: 2025-01-01 15:00:00
- බහු ඒකක එකතු කරන්න (නැස්ට් කිරීම භාවිතා කරමින්) :
SELECT DATE_ADD(DATE_ADD('2025-01-01', INTERVAL 1 DAY), INTERVAL 3 HOUR);
ප්රතිඵලය: 2025-01-02 03:00:00
ගතික දිනය ගණනය
ඔබට DATE_ADD ගතිකව ගණනය කරන දිනයන්ටද යොදා ගත හැක.
- අද සිට දින 7ක් ගණනය කරන්න :
SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY);
ප්රතිඵලය: අද සිට දින 7ක් පසු දිනය.
- දැන් සිට මිනිත්තු 30ක් ගණනය කරන්න :
SELECT DATE_ADD(NOW(), INTERVAL 30 MINUTE);
ප්රතිඵලය: දැන් සිට මිනිත්තු 30ක් පසු datetime.
ප්රායෝගික උදාහරණ
- කල් ඉකුත් වන දිනය ගණනය කිරීම : මිලදී ගැනීමේ දිනයෙන් 30-දින වගකීම් කාලය ගණනය කරන්න.
SELECT DATE_ADD(purchase_date, INTERVAL 30 DAY) AS expiry_date FROM orders;
- ඇරයුම් මතක් කිරීම යැවීම : සිදුවීම් දිනයට පෙර දින 3ක් ගණනය කර මතක් කිරීමක් යවන්න.
SELECT DATE_ADD(event_date, INTERVAL -3 DAY) AS reminder_date FROM events;
- ලොග් රැඳී සිටීමේ කාල සීමාව ගණනය කිරීම : අද සිට දින 90ක් පෙර ගණනය කර එයට වඩා පැරණි ලොග් මකා දමන්න.
DELETE FROM logs WHERE log_date < DATE_ADD(CURDATE(), INTERVAL -90 DAY);
සටහන්
- වලංගු නොවන දිනයන් හසුරවීම : DATE_ADD හි ප්රතිඵලය වලංගු නොවන දිනයක් නම්, MySQL
NULLලබා දිය හැක. ඇතුළත් දත්ත වලංගු ආකෘතියකින් ඇති බවට සහතික වන්න. - කාල කලාප බලපෑම : ඔබ කාල කලාප භාවිතා කරනවා නම්, CURRENT_TIMESTAMP සහ NOW() වැනි ක්රියාකාරකම් බලපෑම් ලැබිය හැක.
DATE_ADD යනු MySQL දිනයේ මෙහෙයුම් සඳහා මූලිකමත් ශක්තිමත්මත් මෙවලමකි. ඔබ එය පරිපූර්ණයෙන් අධ්යයනය කළ පසු, බොහෝ දිනය ගණනයන් කාර්යක්ෂමව කළ හැක. ඊළඟ කොටසේ, අපි DATE_SUB ක්රියාවලිය විස්තරාත්මකව සලකා බලමු.
4. DATE_SUB ක්රියාවලිය: මූලික සහ ප්රායෝගික භාවිතය
DATE_SUB යනු MySQL හි DATE_ADD හි ප්රතිවිරුද්ධයයි. එය දිනයකින් නියමිත අන්තරයක් අඩු කිරීමට භාවිතා වේ. මෙම කොටස මූලික කරුණු සහ ඔබට වාස්තුකාර්යයේ භාවිතා කළ හැකි ප්රායෝගික උදාහරණ පැහැදිලි කරයි.
DATE_SUB යනු කුමක්ද?
DATE_SUB යනු INTERVAL කොටස තුළ නියමිත කාලය ලබා දුන් දිනයක් හෝ datetime එකෙන් අඩු කර නව දිනයක් ලබා දේ. දිනය අඩු කිරීම සඳහා මෙය පහසු මෙවලමකි.
මූලික ව්යවස්ථාව:
DATE_SUB(date, INTERVAL value unit)
- date : ක්රියාත්මක වන දිනය හෝ datetime.
- value : අඩු කිරීමට ඇති අගය.
- unit : අන්තර ඒකකය (උදාහරණයක් ලෙස DAY, MONTH, YEAR, HOUR, MINUTE, SECOND).
මූලික උදාහරණ
මෙන්න DATE_SUB හි ප්රායෝගික උදාහරණ.
- දින 1ක් පෙර ගණනය කරන්න :
SELECT DATE_SUB('2025-01-01', INTERVAL 1 DAY);
ප්රතිඵලය: 2024-12-31
- මාසයක් 1 පෙර ගණනය කරන්න :
SELECT DATE_SUB('2025-01-01', INTERVAL 1 MONTH);
ප්රතිඵලය: 2024-12-01
- වසරක් 1 පෙර ගණනය කරන්න :
SELECT DATE_SUB('2025-01-01', INTERVAL 1 YEAR);
ප්රතිඵල: 2024-01-01
- පෙර 3 පැය ගණනය කරන්න :
SELECT DATE_SUB('2025-01-01 12:00:00', INTERVAL 3 HOUR);
ප්රතිඵල: 2025-01-01 09:00:00
- නැවත නැවත ඒකක (nesting) භාවිතා කර අඩු කිරීම :
SELECT DATE_SUB(DATE_SUB('2025-01-01', INTERVAL 1 DAY), INTERVAL 3 HOUR);
ප්රතිඵල: 2024-12-31 21:00:00
ගතික දිනය ගණනය
ඔබට ගතික දිනයන් මත DATE_SUB භාවිතා කළ හැක.
- අද දිනයට පෙර දින 7 ගණනය කරන්න :
SELECT DATE_SUB(CURDATE(), INTERVAL 7 DAY);
ප්රතිඵල: අද දිනයට පෙර දින 7 ක දිනය.
- දැන් සිට මිනිත්තු 30 කට පෙර ගණනය කරන්න :
SELECT DATE_SUB(NOW(), INTERVAL 30 MINUTE);
ප්රතිඵල: දැන් සිට මිනිත්තු 30 කට පෙර දිනය-වේලාව.
ප්රායෝගික උදාහරණ
- පසුගිය දින 30 තුළ දත්ත ලබා ගන්න :
SELECT * FROM orders WHERE order_date > DATE_SUB(CURDATE(), INTERVAL 30 DAY);
- දින 90 කට වඩා පැරණි දත්ත මකන්න :
DELETE FROM logs WHERE log_date < DATE_SUB(CURDATE(), INTERVAL 90 DAY);
- ස्मරණය දැනුම්දීම : සිදුවීම ආරම්භ වීමට පෙර දින 1 කට ස्मරණයක් සකසන්න.
SELECT event_name, DATE_SUB(event_date, INTERVAL 1 DAY) AS reminder_date FROM events;
- කාර්ය මාරු ගණනය : කාර්ය මාරු ආරම්භ වේලාවට පෙර පැය 3 ගණනය කරන්න.
SELECT DATE_SUB(shift_start, INTERVAL 3 HOUR) AS preparation_time FROM work_shifts;
සටහන්
- අවලංගු දිනයන් හසුරවීම : අඩු කිරීමේ ප්රතිඵලය අවලංගු දිනයක් වුවහොත්, MySQL
NULLලබා දිය හැක. මුල් දිනය සත්යාපනය කිරීම වැදගත් වේ. - කාලකලාප බලපෑම : සේවාදායක කාලකලාප සැකසුම් වෙනස් නම්, DATE_SUB ප්රතිඵලයන් අනපේක්ෂිත ලෙස මාරු විය හැක. අවශ්ය විට
CONVERT_TZ()භාවිතා කරන්න.
DATE_SUB MySQL දිනය ක්රියාකාරකම් සඳහා DATE_ADD සමඟ සමාන වැදගත්කමක් ගනී. අඩු කිරීමේ තර්කය සරලව තබා, ඔබට දත්ත කළමනාකරණය සහ විශ්ලේෂණයේ කාර්යක්ෂමතාව වැඩි කළ හැක. ඊළඟ කොටසේ, අපි 5. INTERVAL වාක්ය විස්තර සහ එය භාවිතා කරන ආකාරය පැහැදිලි කරමු.
5. INTERVAL වාක්ය විස්තර සහ එය භාවිතා කරන ආකාරය
INTERVAL වාක්ය MySQL දිනය/වේලාව ක්රියාකාරකම් වල භාවිතා වේ, සාමාන්යයෙන් DATE_ADD සහ DATE_SUB සමඟ, කාලයක් එකතු කිරීමට හෝ අඩු කිරීමට. මෙම කොටස INTERVAL වාක්යය මූලික සිට උසස් භාවිතය දක්වා විස්තර කරයි.
INTERVAL වාක්ය මූලික
INTERVAL වාක්ය ඉලක්ක දිනයකට එකතු කිරීමට හෝ අඩු කිරීමට අවශ්ය කාල ප්රමාණය නියම කරයි. එය DATE_ADD සහ DATE_SUB සමඟ භාවිතා කර, කෙටි ව්යුහයක් සමඟ බලවත් දිනය ක්රියාකාරකම් සලසයි.
මූලික ව්යුහය:
SELECT date + INTERVAL value unit;
SELECT date - INTERVAL value unit;
- date : මෙහි ක්රියා කරන දිනය හෝ දිනය-වේලාව.
- value : එකතු කිරීමට හෝ අඩු කිරීමට සංඛ්යාත්මක අගය.
- unit : මෙහෙයුමේ ඒකකය (උදාහරණයක්: DAY, MONTH, YEAR, HOUR, MINUTE, SECOND).
ලබා ගත හැකි ඒකක
පහත ඒකක INTERVAL වාක්යයේ භාවිතා කළ හැක.
| Unit | Description |
|---|---|
| SECOND | Seconds |
| MINUTE | Minutes |
| HOUR | Hours |
| DAY | Days |
| WEEK | Weeks |
| MONTH | Months |
| QUARTER | Quarters |
| YEAR | Years |
| SECOND_MICROSECOND | Seconds and microseconds |
| MINUTE_MICROSECOND | Minutes and microseconds |
| MINUTE_SECOND | Minutes and seconds |
| HOUR_MICROSECOND | Hours and microseconds |
| HOUR_SECOND | Hours and seconds |
| HOUR_MINUTE | Hours and minutes |
| DAY_MICROSECOND | Days and microseconds |
| DAY_SECOND | Days and seconds |
| DAY_MINUTE | Days and minutes |
| DAY_HOUR | Days and hours |
| YEAR_MONTH | Years and months |
මූලික උදාහරණ
- දිනයකට දින 1 එකතු කරන්න :
SELECT '2025-01-01' + INTERVAL 1 DAY;
ප්රතිඵල: 2025-01-02
- දිනය-වේලාවකින් පැය 3 අඩු කරන්න :
SELECT '2025-01-01 12:00:00' - INTERVAL 3 HOUR;
ප්රතිඵල: 2025-01-01 09:00:00
- වත්මන් දිනය-වේලාවෙන් මිනිත්තු 10 අඩු කරන්න :
SELECT NOW() - INTERVAL 10 MINUTE;
- මාස අවසානයෙන් ඊළඟ මාසයේ පළමු දිනය ගණනය කරන්න :
SELECT LAST_DAY('2025-01-01') + INTERVAL 1 DAY;
ප්රතිඵල: ඊළඟ මාසයේ පළමු දිනය.
උසස් උදාහරණ
- දිනය පරාස ගණනය පසුගිය දින 30 සඳහා පරාසය ගණනය කරන්න.
SELECT * FROM orders WHERE order_date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE();
- ඊළඟ කාර්තුවේ ආරම්භ දිනය ගණනය කරන්න
SELECT '2025-01-01' + INTERVAL 1 QUARTER;
ප්රතිඵල: ඊළඟ කාර්තුවේ ආරම්භ දිනය.
- කාලකලාප-දැනුම් දෙන වේලාව ගණනය සේවාදායකයේ පෙරනිමි කාලකලාපය තුළ පැය 1 පසු දිනය-වේලාව ලබා ගන්න.
SELECT CONVERT_TZ(NOW(), 'SYSTEM', '+09:00') + INTERVAL 1 HOUR;
- වැඩි සංකීර්ණ ගණනයක් සිදු කරන්න අද සිට සති දෙකක් පසු දිනය ගණනය කර, එම මාසයේ අවසන් දිනය ලබා ගන්න.
SELECT LAST_DAY(CURDATE() + INTERVAL 14 DAY);
සටහන්
- ප්රතිඵල වර්ගය ගැන සැලකිල්ලෙන් සිටින්න INTERVAL ගණනයේ ප්රතිඵලය මුල් වර්ගය (DATE හෝ DATETIME) රැක ගනී. දත්ත වර්ග නිවැරදිව හසුරවන්න.
- මාස අවසාන හැසිරීම මාස අවසානයේ එකතු/ඉවත් කිරීමේදී, MySQL ඊළඟ මාසයේ අවසානයට හෝ ආරම්භයට සකස් කරනු ඇත. උදාහරණයක් ලෙස,
2025-01-31ට මාසයක් එකතු කිරීමෙන්2025-02-28(අලීප් වසර නොවන) ලැබේ. - කාලකලාප බලපෑම සේවාදායකය සහ ග්රාහකයා අතර වෙනස් කාලකලාප සකස් කර ඇත්නම්, datetime ගණනයන් අපේක්ෂිත නොවන ලෙස මාරු විය හැක.
INTERVAL වාක්යය MySQL දිනය ක්රියාකාරකම් සරල කිරීම සඳහා ප්රධාන මෙවලමකි. එහි සවිස්තරාත්මකත්වය නිසා, ඔබට සංකීර්ණ දිනය ගණනයන් පහසුවෙන් කළ හැක. ඊළඟ කොටසේ, 6. ප්රායෝගික උදාහරණ පැහැදිලි කරමු.

6. ප්රායෝගික උදාහරණ
MySQL හි DATE_ADD ක්රියාවලිය සහ INTERVAL වාක්යය භාවිතා කිරීමෙන් සංකීර්ණ දිනය ගණනයන් සහ ගතික සැකසීම සරල වේ. මෙම කොටස වාස්තුකාරී වැඩ සඳහා ප්රයෝජනවත් ප්රායෝගික උදාහරණ කිහිපයක් හඳුන්වා දෙයි.
1. නියමිත කාල පරාසයක දත්ත ලබා ගැනීම
දත්ත විශ්ලේෂණය සහ වාර්තාකරණයේ, නියමිත කාල පරාසයක රෙකෝඩ් ලබා ගැනීම සාමාන්යය වේ.
උදාහරණ 1: පසුගිය 30 දිනවල විකුණුම් දත්ත ලබා ගන්න
SELECT *
FROM sales
WHERE sale_date >= CURDATE() - INTERVAL 30 DAY;
විස්තරය: අද සිට 30 දිනකට පෙර දිනයේ හෝ එම දිනයෙන් පසු දත්ත ලබා ගනී.
උදාහරණ 2: පසුගිය මාසයේ දත්ත ලබා ගන්න
SELECT *
FROM orders
WHERE order_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AND CURDATE();
විස්තරය: පසුගිය මාසයේ ඇණවුම් දත්ත ලබා ගනී.
2. සිදුවීම් මතකදීම සකස් කිරීම
සිදුවීම් ආරම්භ දිනයන් හෝ අවසන් දිනයන් මත මතකදීම පණිවුඩ සකස් කළ හැක.
උදාහරණය: සිදුවීම ආරම්භ වීමට පෙර දින 3ක් මත පණිවුඩයක් යවන්න
SELECT event_name, DATE_SUB(event_date, INTERVAL 3 DAY) AS reminder_date
FROM events;
විස්තරය: සිදුවීම් දිනයට පෙර දින 3ක් ගණනය කර, එය මතකදීම දිනය ලෙස සකසයි.
3. කල් ඉකුත් වීමේ දිනයන් කළමනාකරණය
ලියාපදිංචි දිනය මත කල් ඉකුත් වීමේ දිනයන් ගණනය කිරීම බොහෝ යෙදුම් වල භාවිතා වේ.
උදාහරණ 1: ලියාපදිංචියෙන් පසු දින 30ක කල් ඉකුත් වීමේ දිනය ගණනය කරන්න
SELECT user_id, registration_date, DATE_ADD(registration_date, INTERVAL 30 DAY) AS expiry_date
FROM users;
විස්තරය: ලියාපදිංචි දිනයෙන් දින 30ක පසු කල් ඉකුත් වීමේ දිනය ගණනය කරයි.
උදාහරණ 2: කල් ඉකුත් වූ දත්ත මකා දමන්න
DELETE FROM sessions
WHERE expiry_date < NOW();
විස්තරය: වත්මන් datetime මත කල් ඉකුත් වූ සැසිය දත්ත මකා දමයි.
4. කාර්ය මාරු සහ කාලසටහන් ගණනයන්
කාර්ය කාලසටහන් සඳහා ආරම්භ හෝ අවසන් වේලාව මත වේලාවන් සකස් කිරීමේ උදාහරණ.
උදාහරණය: කාර්ය මාරු ආරම්භයට පෙර පැය 1ක් ගණනය කරන්න
SELECT shift_id, shift_start, DATE_SUB(shift_start, INTERVAL 1 HOUR) AS preparation_time
FROM shifts;
විස්තරය: කාර්ය මාරු ආරම්භ වේලාවට පෙර පැය 1ක් ගණනය කර, එය සූදානම් කාලයක් ලෙස පෙන්වයි.
5. බහු INTERVAL එකතු කිරීමේ ගණනයන්
ගණනයන්හි බහු කාල පරාස එකතු කිරීමේ උදාහරණ.
උදාහරණ 1: අද සිට මාසයක් පසු මාසයේ අවසන් දිනය ලබා ගන්න
SELECT LAST_DAY(CURDATE() + INTERVAL 1 MONTH);
විස්තරය: අද සිට මාසයක් පසු මාසයේ අවසන් දිනය ගණනය කරයි.
උදාහරණ 2: ලියාපදිංචි කිරීමෙන් 1 වසරක් පසු මාස 3ක ගරුකාලයක් එකතු කරන්න
SELECT user_id, DATE_ADD(DATE_ADD(registration_date, INTERVAL 1 YEAR), INTERVAL 3 MONTH) AS final_deadline
FROM users;
විස්තරය: ලියාපදිංචි දිනයෙන් 1 වසරක් එකතු කර, පසු මාස 3ක ගරුකාලයක් එකතු කර අවසන් නියමිත දිනය ගණනය කරයි.
6. දත්ත පිරිසිදු කිරීම සහ වැඩිදියුණු කිරීම
පැරණි දත්ත මකා දමා දත්ත ගබඩාව වැඩිදියුණු කිරීමේ උදාහරණ.
උදාහරණය: පසුගිය 90 දිනවල ලොග් ඉන් නොකළ පරිශීලකයන් මකා දමන්න
DELETE FROM user_activity
WHERE last_login < CURDATE() - INTERVAL 90 DAY;
විස්තරය: අද දිනයෙන් 90 දිනකට පසු අවසන් ලොග්ඉන් වූ පරිශීලකයන් මකා දමයි.
සටහන්
- ගණනයේ ප්රතිඵල වල සත්යාපනය : මාස අවසන් සහ අධිවර්ෂ වැනි සීමා අවස්ථා වෙත විශේෂ අවධානයක් දෙන්න.
- දත්ත වර්ග සමගිත්වය තහවුරු කරන්න : නිවැරදි දිනය/කාල වර්ග (DATE, DATETIME, ආදිය) නිරූපණය කිරීම දෝෂ වැළැක්වීමට උපකාරී වේ.
- කාල කලාප ගැන සැලකිල්ල : විවිධ කාල කලාප අතර ක්රියා කරන විට
CONVERT_TZ()ක්රියාවලිය භාවිතා කරන්න.
DATE_ADD සහ INTERVAL කොටස යොදා ගැනීමෙන්, ඔබට වාස්තුකාලීන වැඩකළේදි දිනය ක්රියාකාරකම් කාර්යක්ෂමව සරල කළ හැක. ඊළඟ කොටසේ, අපි 7. සටහන් සහ හොඳ පුරුදු විස්තරාත්මකව පැහැදිලි කරමු.
7. සටහන් සහ හොඳ පුරුදු
MySQL හි දිනය ක්රියාකාරකම් ඉතා ප්රයෝජනවත් වන නමුත්, ඒවා වාස්තුකාලීන වැඩකළේදි භාවිතා කරන විට ඔබට කිහිපයක් මූලික කරුණු සහ හොඳ පුරුදු තේරුම් ගැනීමට අවශ්ය වේ. මෙම කොටස ඔබට අවධානය යොමු කළ යුතු දේවල් සහ දිනය ක්රියාකාරකම් කාර්යක්ෂමව භාවිතා කරන ආකාරය පැහැදිලි කරයි.
සටහන්
1. දත්ත වර්ග සමගිත්වය
- ගැටලුව : MySQL හි, දිනය/කාල ක්රියාකාරකම් සඳහා භාවිතා කරන දත්ත වර්ග (DATE, DATETIME, TIMESTAMP, ආදිය) අනුව ප්රතිඵල වෙනස් විය හැක.
- උදාහරණය :
SELECT DATE_ADD('2025-01-01', INTERVAL 1 DAY); -- Valid operation SELECT DATE_ADD('Invalid Date', INTERVAL 1 DAY); -- Returns NULL for an invalid date
- පියවර : ඇතුළත් දත්ත නිවැරදි ආකෘතියේදැයි පෙර සත්යාපනය කර, සුදුසු දත්ත වර්ග තෝරන්න.
2. අවලංගු දිනයන් සැකසීම
- ගැටලුව : මාස අවසන් හෝ අධිවර්ෂ සම්බන්ධ ගණනයන් අභියෝගාත්මක සීමා අවස්ථා ඇති කරයි.
- උදාහරණය :
SELECT DATE_ADD('2025-01-31', INTERVAL 1 MONTH); -- Result: 2025-02-28
මෙම අවස්ථාවේ, MySQL ස්වයංක්රීයව සකසයි, නමුත් ප්රතිඵල ඔබේ අපේක්ෂාවට අනුකූල නොවිය හැක.
- පියවර : මාස අවසන් දිනයන් සැකසීමේදී
LAST_DAY()ක්රියාවලිය භාවිතා කර පරීක්ෂා කරන්න.SELECT LAST_DAY('2025-01-31') + INTERVAL 1 MONTH;
3. කාල කලාප සැලකිලි
- ගැටලුව : සේවාදායක කාල කලාපය යෙදුමේ කාල කලාපයට වෙනස් නම්, දත්ත අසමතුලිතතා හෝ අනපේක්ෂිත ප්රතිඵල ඇති විය හැක.
- උදාහරණය :
SELECT NOW(); -- Depends on the server timezone
- පියවර : කාල කලාපය පැහැදිලිව සකසන්න.
SELECT CONVERT_TZ(NOW(), 'SYSTEM', '+09:00'); -- Convert to Japan time
4. සංකීර්ණ ගණනයන්හි කාර්යක්ෂමතාව
- ගැටලුව : සංකීර්ණ දිනය ගණනයන් සමඟ ප්රශ්න ක්රියාත්මක වේගයට බලපායි.
- පියවර : අනිවාර්ය නොවන ගණනයන් අඩු කර, සූචක (indexes) භාවිතයෙන් ප්රශ්න සුදානම් කරන්න.
හොඳ පුරුදු
1. ප්රමිතීකරණ ආකෘති භාවිතා කරන්න
- දිනය ආකෘති සමාන්යව තබා ගන්න.
- නිර්දේශිත ආකෘති:
YYYY-MM-DD(DATE),YYYY-MM-DD HH:MM:SS(DATETIME). - උදාහරණය :
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
2. ක්රියාකාරකම් සාර්ථකව එකතු කරන්න
- DATE_ADD/DATE_SUB සමඟ
LAST_DAYහෝCURDATEඑකතු කිරීමෙන් වඩා ස flexibil ගණනයන් සිදු කළ හැක. - උදාහරණය :
SELECT LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 1 MONTH));
3. ගතික දිනය ක්රියාකාරකම් සැලැස්වීමේදී අවධානයෙන් සැලසුම් කරන්න
- ගතික දිනයන් සමඟ වැඩ කරන විට, ප්රශ්න වෙන් කර පියවරෙන් පියවර ක්රියාත්මක කරන්න.
- උදාහරණය :
SET @next_month = DATE_ADD(CURDATE(), INTERVAL 1 MONTH); SELECT LAST_DAY(@next_month);
4. කාල කලාප ආරක්ෂිතව කළමනාකරණය කරන්න
- සේවාදායකය සහ ග්රාහකය අතර කාල කලාප සමගිත්වය තබා ගන්න.
- උදාහරණය :
SET time_zone = '+09:00';
5. පරීක්ෂණ පරිසරයක සත්යාපනය කරන්න
- සංකීර්ණ දිනය ගණනයන් සහ විවිධ කාල කලාප අතර ගණනයන් පෙර පරීක්ෂා කරන්න.
දිනය ක්රියාකාරකම්හි පොදු වැරදි වලින් වැළැක්වීම
දිනය ක්රියාකාරකම් යනු දත්ත ගබඩා සැලසුම් සහ ප්රශ්න නිරවද්යතාවයට වැදගත් කුසලතාවකි. වැරදි තේරුම් ගැනීම සහ හොඳ පුරුදු අනුගමනය කිරීමෙන්, ඔබට ගැටළු වැළැක්වීමට සහ කාර්යක්ෂම දත්ත සැකසීමේ හැකියාව ලබා ගත හැක.
8. නිතර අසන ප්රශ්න (FAQ)
MySQL දිනය ක්රියාකාරකම් පිළිබඳ නිතර අසන ප්රශ්න (FAQ) මෙහි ඇත. මෙම පිළිතුරු ආරම්භකයන් සිට මධ්යම පරිශීලකයන් දක්වා බොහෝවිට සිතන පොදු කරුණු මත කේන්ද්රගත වේ.
Q1: DATE_ADD සහ + operator සමඟ INTERVAL භාවිත කිරීමේ වෙනස කුමක්ද?
A1:
DATE_ADD()යනු දිනය ගණනය කිරීම සඳහා විශේෂිත ක්රියාකාරකමක් වන අතර දෝෂ සැකසීම සහ වර්ග පරිවර්තනය සඳහා වඩා හොඳයි.+ INTERVALසරලයි, නමුත් සමහර අවස්ථාවල වර්ග පරිවර්තන දෝෂ ඇති විය හැක.
Example: DATE_ADD භාවිත කිරීම:
SELECT DATE_ADD('2025-01-01', INTERVAL 1 DAY);
Example: + operator සමඟ INTERVAL භාවිත කිරීම:
SELECT '2025-01-01' + INTERVAL 1 DAY;
සාමාන්යයෙන්, DATE_ADD() භාවිත කිරීම නිර්දේශ කරයි.
Q2: DATE_ADD එකවර බහු INTERVAL එකතු කළ හැදියිද?
A2:
නැත. DATE_ADD() එකවර එක් INTERVAL එකක් පමණක් නියම කළ හැක. නමුත්, එකම ප්රතිඵලය ලබා ගැනීමට බහු DATE_ADD() ඇමතුම් අන්යෝන්යව ගොඩනැගිය හැක.
Example: Add multiple intervals:
SELECT DATE_ADD(DATE_ADD('2025-01-01', INTERVAL 1 DAY), INTERVAL 1 MONTH);
Q3: MySQL හි දිනයේ ආකෘතිය කෙසේ වෙනස් කළ හැකිද?
A3:
DATE_FORMAT() ක්රියාකාරකම භාවිතා කර ඔබට අවශ්ය පරිදි දිනය/කාලය ආකෘතිකරණය කරන්න.
Example: Format conversion:
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_date;
Result: 2025-01-01 12:30:45
Q4: මාස අවසාන දිනයකට මාසයක් එකතු කළහොත් කුමක් වේද?
A4:
MySQL ස්වයංක්රීයව සකස් කර, ප්රතිඵලය ඊළඟ මාසයේ අවසන් දිනය වේ.
Example:
SELECT DATE_ADD('2025-01-31', INTERVAL 1 MONTH);
Result: 2025-02-28
මෙම හැසිරීම පහසුය, නමුත් ඔබේ අදහස් කරන ලොජික් සමඟ ගැලපේදැයි තහවුරු කරගන්න.
Q5: කාලකලාප-දැනුම් දිනය ගණනය කිරීම් කෙසේ කළ හැකිද?
A5:
කාලකලාපය නිරූපණය කිරීමට MySQL හි CONVERT_TZ() ක්රියාකාරකම භාවිතා කරන්න.
Example: Convert from UTC to Japan time:
SELECT CONVERT_TZ('2025-01-01 12:00:00', 'UTC', '+09:00') AS japan_time;
Q6: DATE_ADD හි අවලංගු දිනයක් නියම කළහොත් කුමක් වේද?
A6:
අවලංගු දිනයක් (උදා: 2025-02-30) නියම කළහොත්, MySQL NULL ලබා දේ.
Example:
SELECT DATE_ADD('2025-02-30', INTERVAL 1 DAY);
Result: NULL
ආදාන පූර්ව-වලංගු කිරීමේ පරීක්ෂා කිරීම නිර්දේශ කරයි.
Q7: අතීත හෝ අනාගත දිනයන් මත පදනම්ව කොන්දේසි සැකසීමට කෙසේද?
A7:
ආශ්රිත දිනය ගණනය කිරීමට DATE_ADD හෝ DATE_SUB භාවිතා කර, එම ප්රතිඵලය WHERE වාක්යයේ භාවිතා කරන්න.
Example: Retrieve data from the past 30 days:
SELECT *
FROM sales
WHERE sale_date >= CURDATE() - INTERVAL 30 DAY;
Q8: බහු කාලකලාප භාවිතා කරන විට හොඳ පුරුදු මොනවාද?
A8:
UTCහි සියලු datetime දත්ත සුරකින්න.- අවශ්ය කාලකලාපයට පාරිභෝගික පැත්තේ පරිවර්තනය කරන්න.
Example: Save data in UTC:
SET time_zone = '+00:00';
Q9: MySQL හි දිනය සහ කාලය වෙන්ව පාලනය කළ හැදියිද?
A9:
ඔව්. DATE() හෝ TIME() භාවිතා කර දිනය හෝ කාලය කොටස ලබා ගන්න.
Example 1: Extract date only:
SELECT DATE(NOW());
Example 2: Extract time only:
SELECT TIME(NOW());
Q10: MySQL හි INTERVAL වාක්යය සහය නොදක්වන ඒකක භාවිතා කළ හැදියිද?
A10:
MySQL INTERVAL ඒකකවල නියමිත කට්ටලයක් පමණක් සහය දක්වයි. වෙනත් ඒකකයක් අවශ්ය නම්, එය සහය දක්වන සුදුසු ඒකකයකට පරිවර්තනය කරන්න.
9. Summary
MySQL හි දිනයේ ක්රියාකාරකම් දත්ත ගබඩා සැලසුම් සහ මෙහෙයුම් සඳහා අත්යවශ්ය කුසලතාවකි. DATE_ADD, DATE_SUB සහ INTERVAL වාක්යය භාවිතා කිරීමෙන්, සංකීර්ණ දිනය ගණනය කිරීම් පහසුවෙන් හා කාර්යක්ෂමව සිදු කළ හැක.
Key Takeaways
- දිනය/කාල වර්ග මූලික කරුණු :
- MySQL හි, DATE, DATETIME, TIMESTAMP වැනි දිනය/කාල වර්ග නිවැරදිව භාවිතා කළ යුතුය.
- DATE_ADD සහ DATE_SUB :
- දිනයන් එකතු කිරීම හෝ අඩු කිරීම සඳහා පහසු ක්රියාකාරකම්, සරල වාක්ය රචනයෙන් ලවණීය මෙහෙයුම්.
- INTERVAL වාක්යය :
- වර්ෂ, මාස, දින, පැය වැනි ඒකක භාවිතා කර කාර්යක්ෂම දිනය ගණනය කිරීමට අත්යවශ්ය මෙවලම.
- ප්රායෝගික උදාහරණ :
- අතීත/අනාගත දත්ත ලබා ගැනීම, කල් ඉකුත් වීමේ දිනයන් කළමනාකරණය, මතක දැනුම් දීම වැනි බොහෝ අවස්ථා සඳහා ප්රයෝජනවත්.
- සටහන් සහ හොඳ පුරුදු :
- සියලු datetime දත්ත
UTCහි සුරකින්න. අවශ්ය කාලකලාපයට පාරිභෝගික පැත්තේ පරිවර්තනය කරන්න.
දත්ත වර්ග සමගාමීතාව, කාලකලාප බලපෑම, සහ මාස අවසාන සකස් කිරීම වැනි සැලකිලිමත් කරුණු තේරුම් ගැනීම වැදගත් වේ.
- නිතර අසන ප්රශ්න :
- ආරම්භකයන්ට සාමාන්යයෙන් මුහුණ දෙන ප්රශ්න සහ ගැටළු සඳහා ප්රායෝගික විසඳුම් ලබා දී ඇත.
ඊළඟ පියවර
- ඔබ ඉගෙන ගත් දේ අයදුම් කරන්න :
- ඔබේ ව්යාපෘතියේ DATE_ADD සහ DATE_SUB භාවිතා කර දිනය ක්රියාකාරකම් පුහුණු කරන්න.
- කාලකලාපයන් සැලකිල්ලට ගනිමින් නිර්මාණය කරන්න :
- බහු කාලකලාපයන් තුළ ක්රියා කරන දත්ත ගබඩා වල, නිවැරදි කාලකලාප කළමනාකරණය සහ දිනය ගණනය කිරීම අත්යවශ්ය වේ.
- තවත් සුදානම :
- කාර්යක්ෂම විමසුම් නිර්මාණය කර, කාර්ය සාධනය සැලකිල්ලට ගනිමින් ඉන්ඩෙක්ස් භාවිතා කර දත්ත ක්රියාකාරකම් වැඩි දියුණු කරන්න.
MySQL දිනය ක්රියාකාරකම් පාලනය කිරීම දත්ත කළමනාකරණය සහ විශ්ලේෂණය කිරීමේ කාර්යක්ෂමතාවය විශාල ලෙස වැඩිදියුණු කරයි. මෙම ලිපිය යොමු කරගනිමින්, ඔබේ කාර්යභාරයේ මෙම ප්රායෝගික කුසලතා සක්රියව අයදුම් කරන්න.


