- 1 1. MySQL හි වත්මන් වේලාව ලබා ගැනීම (අවසාන: කෙටිම SQL චීට් ශීට්)
- 1.1 1.1 MySQL වත්මන් දිනය සහ වේලාව: NOW() / CURRENT_TIMESTAMP
- 1.2 1.2 MySQL වත්මන් දිනය: CURDATE()
- 1.3 1.3 MySQL වත්මන් වේලාව: CURTIME()
- 1.4 1.4 MySQL වත්මන් UTC වේලාව: UTC_TIMESTAMP()
- 1.5 1.5 MySQL වත්මන් වේලාව මිලිසෙකන්ඩ් සමඟ: NOW(3) / CURRENT_TIMESTAMP(3)
- 1.6 1.6 අරමුණ අනුව කෙටි චීට් ශීට්
- 1.7 පොදු වැරදි සාරාංශය
- 2 2. MySQL NOW() සහ CURRENT_TIMESTAMP අතර වෙනස්කම්
- 2.1 2.1 ඔබට කුමන එක භාවිතා කළ යුතුද? (SELECT භාවිතය / DEFAULT භාවිතය)
- 2.2 2.2 DEFAULT / ON UPDATE හි නිවැරදි භාවිතය
- 2.3 2.3 NOW() සහ SYSDATE() අතර වෙනස්කම් (වැදගත්)
- 2.4 2.4 ඔබට කුමන එක භාවිතා කළ යුතුද?
- 2.5 2.5 සාමාන්ය වැරදි අවබෝධයන් සහ ගැටළු
- 2.6 2.6 ප්රායෝගික හොඳම පුරුදු
- 2.7 3.1 MySQL datetime ආකෘතිකරණය: DATE_FORMAT(NOW(), …)
- 2.8 3.2 ජපන්‑ශෛලිය හෝ 12‑පැය ආකෘතියට පරිවර්තනය
- 2.9 3.3 MySQL වේලාව‑පමණක් ආකෘතිකරණය: TIME_FORMAT()
- 2.10 3.4 String → datetime පරිවර්තනය: STR_TO_DATE()
- 2.11 3.5 නිෂ්පාදනයේ වැදගත් කරුණු
- 2.12 3.6 මිලිසෙකන්ඩ් සමඟ ආකෘතිකරණය
- 2.13 3.7 ආකෘතිකරණයේ අරමුණ අනුව සාරාංශය
- 3 4. MySQL දිනය සහ වේලාව එකතු/ඉවත් කිරීම (DATE_ADD / DATE_SUB)
- 4 5. MySQL හි දිනය/කාල වෙනස්කම් ගණනය කිරීම (DATEDIFF / TIMESTAMPDIFF)
- 5 6. වත්මන් කාලය භාවිතා කර දිනය පරාස විමසුම්
1. MySQL හි වත්මන් වේලාව ලබා ගැනීම (අවසාන: කෙටිම SQL චීට් ශීට්)
ඔබ MySQL හි වත්මන් වේලාව ලබා ගැනීමට අවශ්ය නම්, මතක තබා ගත යුතු SQL ක්රියාකාරකම් කිහිපයක් පමණක් ඇත.
පහත දැක්වෙන්නේ “MySQL get current time” යන සෙවුම් යතුර සඳහා කෙටිම පිළිතුර වේ.
1.1 MySQL වත්මන් දිනය සහ වේලාව: NOW() / CURRENT_TIMESTAMP
වර්තමාන දිනය + වේලාව (YYYY-MM-DD HH:MM:SS) ලබා දෙයි.
SELECT NOW();
SELECT CURRENT_TIMESTAMP;
උදාහරණ ප්රතිඵල
2025-02-01 15:30:45
NOW()සහCURRENT_TIMESTAMPසාමාන්යයෙන් එකම ප්රතිඵලය ලබා දෙයි.- දෙකම වත්මන් දිනය සහ වේලාව ලබා දෙයි.
- ඔබට මිලිසෙකන්ඩ් අවශ්ය නම්, පහත දැක්වෙන පරිදි භාවිතා කරන්න.
SELECT NOW(3);
සටහන් (සාමාන්ය දෝෂ)
- සේවාදායකයේ වේලා කලාප සැකසුම මත පදනම් වේ.
- UTC පරිසරයක, ජපානයේ වේලාව වෙනුවට UTC ලබා ගත හැක.
- විමසුම ක්රියාත්මක වන අතර, එය මූලිකව එකම වේලාව ලබා දෙයි (එකම ප්රකාශනය තුළ ස්ථාවර).
1.2 MySQL වත්මන් දිනය: CURDATE()
දිනය පමණක් ලබා දෙයි (වේලාව නොමැත).
SELECT CURDATE();
උදාහරණ ප්රතිඵල
2025-02-01
භාවිතා කිරීමේ අවස්ථා
- අද දත්ත විමසීම
- දිනය සැසඳීම (උදා: අද දිනයේ රෙකෝඩ් පමණක් පෙරහන් කිරීම)
සටහන්
- ආපසු ලැබෙන අගය
DATEවර්ගයකි. - දින-වේලාව සැකසීම අවශ්ය නම් මෙය සුදුසු නොවේ.
1.3 MySQL වත්මන් වේලාව: CURTIME()
වේලාව පමණක් ලබා දෙයි.
SELECT CURTIME();
උදාහරණ ප්රතිඵල
15:30:45
භාවිතා කිරීමේ අවස්ථා
- ව්යාපාරික වේලාව පරීක්ෂා කිරීම
- වේලාව කවුළුව අනුව ශාඛා තීරණය කිරීම
සටහන්
- දිනයේ තොරතුරු ඇතුළත් නොවේ.
DATEවර්ගයේ තීරුව සමඟ සැසඳීමට භාවිතා කළ නොහැක.
1.4 MySQL වත්මන් UTC වේලාව: UTC_TIMESTAMP()
සේවාදායකයේ වේලා කලාප සැකසුම නොසලකා, UTC (සමන්විත සර්වජනික වේලාව) තුළ වේලාව ලබා දෙයි.
SELECT UTC_TIMESTAMP();
උදාහරණ ප්රතිඵල
2025-02-01 06:30:45
ඔබට මෙය භාවිතා කළ යුතු අවස්ථා
- ගෝලීය සේවාවන්
- ලොග් ගොනු සදාකාලිකව UTC තුළ සුරකින්නා වූ නිර්මාණ
සාමාන්ය දෝෂ
NOW()සමඟ මිශ්ර කිරීමෙන් වේලාව අස්ථානගත වේ.- යෙදුම JST (ජපානයේ වේලාව) ලෙස ගණනය කරන්නේ නම්, 9 පැය වෙනසක් පෙනේ.
1.5 MySQL වත්මන් වේලාව මිලිසෙකන්ඩ් සමඟ: NOW(3) / CURRENT_TIMESTAMP(3)
MySQL 5.6 සහ ඊට පසු සංස්කරණ වල භාගික තත්පර (fractional seconds) සහය දක්වයි.
SELECT NOW(3);
SELECT CURRENT_TIMESTAMP(3);
උදාහරණ ප්රතිඵල
2025-02-01 15:30:45.123
සුරැකීම සඳහා සටහන්
ඔබගේ තීරුවත් භාගික තත්පර (fractional seconds) සහය දක්විය යුතුය.
DATETIME(3)
TIMESTAMP(3)
සහාය නොදක්වන තීරුවකට සුරැකිම් කරන්නේ නම්, භාගික කොටස කප්පාදු කරනු ලැබේ.
1.6 අරමුණ අනුව කෙටි චීට් ශීට්
| Purpose | SQL |
|---|---|
| Current date and time | SELECT NOW(); |
| Get UTC | SELECT UTC_TIMESTAMP(); |
| Date only | SELECT CURDATE(); |
| Time only | SELECT CURTIME(); |
| Get milliseconds | SELECT NOW(3); |
පොදු වැරදි සාරාංශය
- වේලාව අස්ථානගත වේ, ඔබ වේලා කලාපය පරීක්ෂා නොකළ නිසා.
NOW(3)භාවිතා කිරීම, මිලිසෙකන්ඩ් සහය දක්වන තීරුවක් නොමැතිව.- UTC සහ ස්ථානීය වේලාව මිශ්ර කිරීම.
- DATETIME සහ TIMESTAMP අතර වෙනස නොදැනීම.

MySQL DATETIME සහ TIMESTAMP අතර වෙනස (වේලා කලාප පරිවර්තනය සිදුවේදැයි සැසඳීම)
2. MySQL NOW() සහ CURRENT_TIMESTAMP අතර වෙනස්කම්
NOW() සහ CURRENT_TIMESTAMP සමාන පෙනුමක් ඇත, නමුත් ඇයි භාවිතා කළ යුතුද, ඒවා කෙසේ ක්රියා කරයි යන දේ වැරදි ලෙස තේරුම් ගැනීම මඟින් පහසුවෙන් දෝෂ ඇති විය හැක. මෙහිදී අපි වෙනස්කම්, නිවැරදි භාවිතය, සහ පොදු වැරදි සාරාංශ කරමු.
2.1 ඔබට කුමන එක භාවිතා කළ යුතුද? (SELECT භාවිතය / DEFAULT භාවිතය)
■ SELECT තුළ වත්මන් දිනය/වේලාව ලබා ගැනීමේදී
SELECT NOW();
SELECT CURRENT_TIMESTAMP;
සාමාන්යයෙන්, දෙකම එකම ප්රතිඵලය ලබා දෙයි.
- එය සමාන (සමනාම) වේ.
- ආපසු ලැබෙන අගය
DATETIMEසමඟ සමාන වේ. - වේලා කලාප සැකසුම මත බලපායි.
ප්රායෝගික සාරාංශය
- වචන පඬිවීමේ පහසුව සඳහා →
NOW() - සම්මත SQL රීතිය සඳහා →
CURRENT_TIMESTAMP
■ තීරුවේ පෙරනිමි අගය සකස් කිරීමේදී
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
මෙහි ප්රධාන කරුණ වන්නේ:
පෙරනිමි අගයක් සඳහා, සාමාන්යයෙන්
CURRENT_TIMESTAMPභාවිතා කරයි.
Some environments allow NOW() too, but MySQL අනුවාදය සහ SQL ප්රකාරය අනුව හැසිරීම වෙනස් විය හැක. The safer choice is CURRENT_TIMESTAMP.
2.2 DEFAULT / ON UPDATE හි නිවැරදි භාවිතය
If you want to auto-update an “updated at” timestamp:
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
);
හැසිරීම
- INSERT කිරීමේදී → created_at / updated_at සඳහා වත්මන් කාලය සකසයි
- UPDATE කිරීමේදී → updated_at පමණක් යාවත්කාලීන කරයි
සාමාන්ය වැරදි
DATETIMEභාවිතා කරන විට භාගික-තත්පර නිරවද්යතාව නොගැලපීම- බහු TIMESTAMP තීරුවල සමඟ පරණ MySQL සීමා (MySQL 5.6 සහ එයට පෙර සීමා තිබුණි) හමුවීම
2.3 NOW() සහ SYSDATE() අතර වෙනස්කම් (වැදගත්)
SYSDATE() සමඟ ඇති වෙනස පහසුවෙන් නොසලකා හැරිය හැකි කරුණකි.
SELECT NOW(), SYSDATE();
■ හැසිරීමේ වෙනස්කම්
NOW()→ විමසුම ආරම්භ වූ වේලාවේ ස්ථිර වේSYSDATE()→ එය කැඳවූ මොහොතේ කාලය ලබා දෙයි
උදාහරණය:
SELECT NOW(), SLEEP(3), NOW();
NOW() එකම අගය ලබා දෙයි.
SELECT SYSDATE(), SLEEP(3), SYSDATE();
SYSDATE() තත්පර 3ක වෙනසක් පෙන්වයි.
2.4 ඔබට කුමන එක භාවිතා කළ යුතුද?
| Function | Behavior | Recommended use |
|---|---|---|
| NOW() | Fixed within a query | Logging, consistency-focused |
| SYSDATE() | Call-time value | Precise real-time retrieval |
ඇත්තේ ලෝක පද්ධති වල NOW() බොහෝ විට නිර්දේශ කරන්නේ ඇයි
- ගනුදෙනුවක් තුළ සමතුලිතතාව රැකගනී (බහු SQL ප්රකාශන එකට සැකසීමේ ක්රියාවලිය)
- ප්රතිලේඛන පරිසරවල ආරක්ෂිතයි
2.5 සාමාන්ය වැරදි අවබෝධයන් සහ ගැටළු
❌ “NOW() සහ CURRENT_TIMESTAMP එකම දෙයයි, එබැවින් ඔබට එය ගැන සිතීමට අවශ්ය නැත.”
→ පරිසරය අනුව, පෙරනිමිති හෝ යාවත්කාලීන හැසිරීමේ වෙනස්කම් පෙන්විය හැක.
❌ “SYSDATE() වඩා නිවැරදි, එබැවින් එය සෑම විටම හොඳයි.”
→ එය ප්රතිලේඛන පරිසරවල ගැටළු ඇති කරවිය හැක.
❌ කාල කලාපය තහවුරු නොකිරීම
SHOW VARIABLES LIKE '%time_zone%';
ඔබ එය පරීක්ෂා නොකළේ නම්, කාල අස්ථානගත කිරීම් ලැබිය හැක.
2.6 ප්රායෝගික හොඳම පුරුදු
- SELECT ලබා ගැනීම →
NOW() - තීරුවේ පෙරනිමිති →
CURRENT_TIMESTAMP - ස්වයංක්රීය යාවත්කාලීන →
ON UPDATE CURRENT_TIMESTAMP - සමතුලිතතාවයට අවධානය → පෙරනිමිය
NOW() - UTC-අධාරිත නිර්මාණය →
TIMESTAMP+ UTC ලෙස ගබඩා කිරීම
- MySQL වත්මන් වේලාව ආකෘතිකරණය (DATE_FORMAT / TIME_FORMAT)
MySQL හි වත්මන් වේලාව ලබා ගැනීමෙන් පසු, දර්ශන ආකෘතිය වෙනස් කිරීම ඉතා සාමාන්යය වේ.
“MySQL current time format” සෙවුම් අදහස සඳහා, අවබෝධ කරගත යුතු ප්රධාන ක්රියාකාරකමDATE_FORMAT()වේ.
3.1 MySQL datetime ආකෘතිකරණය: DATE_FORMAT(NOW(), …)
මූලික වාක්ය රචනය:
sql
SELECT DATE_FORMAT(target_datetime, 'format_string');
උදාහරණය: වත්මන් වේලාව ආකෘතිකරණය
sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
උදාහරණ ප්රතිඵල
2025-02-01 15:30:45
සාමාන්යයෙන් භාවිතා වන ආකෘති නියමකරු
| විශේෂකය | අර්ථය | උදාහරණ |
|---|---|---|
| %Y | අවුරුද්ද (4 අංක) | 2025 |
| %m | මාසය (2 අංක) | 02 |
| %d | දිනය (2 අංක) | 01 |
| %H | පැය (24‑පැය) | 15 |
| %h | පැය (12‑පැය) | 03 |
| %i | මිනිත්තුව | 30 |
| %s | තත්පරය | 45 |
| %p | AM/PM | PM |
3.2 ජපන්‑ශෛලිය හෝ 12‑පැය ආකෘතියට පරිවර්තනය
■ ජපන්‑ශෛලිය ආකෘතිය
sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i');
උදාහරණ ප්රතිඵල:
2025-02-01 15:30
■ 12‑පැය ආකෘතිය + AM/PM
sql
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %h:%i:%s %p');
උදාහරණ ප්රතිඵල:
2025-02-01 03:30:45 PM
3.3 MySQL වේලාව‑පමණක් ආකෘතිකරණය: TIME_FORMAT()
TIME වර්ග දත්ත සඳහා විශේෂිත ආකෘතිකරණ ක්රියාකාරකම.
sql
SELECT TIME_FORMAT(CURTIME(), '%H:%i');
උදාහරණ ප්රතිඵල:
15:30
සටහන්
– TIME_FORMAT() යනු TIME වර්ගයට පමණක් භාවිතා වේ.
– DATETIME සඳහා DATE_FORMAT() භාවිතා කරන්න.
3.4 String → datetime පරිවර්තනය: STR_TO_DATE()
String දත්ත datetime වර්ගයට පරිවර්තනය කිරීම:
sql
SELECT STR_TO_DATE('2025-02-01 15:30:45', '%Y-%m-%d %H:%i:%s');
උදාහරණ ප්රතිඵල:
2025-02-01 15:30:45
සාමාන්ය වැරදි
– ආකෘති නොගැලපීම NULL ලබා දේ.
– %m සහ %c (ශුන්ය‑පූරණය සහ නො‑පූරණ මාස) අතර ගැලපීම.
3.5 නිෂ්පාදනයේ වැදගත් කරුණු
❌ ආකෘතිකරණය කිරීමෙන් පසු සසඳන්න එපා
වැරදි උදාහරණ:
sql
WHERE DATE_FORMAT(created_at, '%Y-%m-%d') = '2025-02-01';
මෙය ඉන්ඩෙක්ස් අක්රිය කර (විමසුම් කාර්යක්ෂමතාව අඩු) නිසා නිර්දේශ නොකෙරේ.
නිර්දේශිත ක්රමය:
sql
WHERE created_at >= '2025-02-01' AND created_at < '2025-02-02';
❌ දත්ත ගබඩාවේ අධික ආකෘතිකරණය නොකරන්න
වෙබ් යෙදුම් වලදී, දර්ශන ආකෘතිකරණය යෙදුම් පාර්ශවයේ වඩා ස flexibile වේ.
දත්ත ගබඩාව “ගබඩා කිරීම සහ ගණනය කිරීම” මත අවධානය යොමු කළ යුතුය.
3.6 මිලිසෙකන්ඩ් සමඟ ආකෘතිකරණය
sql
SELECT DATE_FORMAT(NOW(3), '%Y-%m-%d %H:%i:%s.%f');
%f මයික්රොසෙකන්ඩ් (6 අංක) නියම කරයි.
සටහන
– තීරුව DATETIME(3) වැනි නොවේ නම්, භාගික කොටස කප්පාදු වේ.
– MySQL 5.6 සහ පසුගිය සංස්කරණ වල ලබා ගත හැක.
3.7 ආකෘතිකරණයේ අරමුණ අනුව සාරාංශය
| අරමුණ | ක්රියාකාරකම |
|---|---|
| දර්ශන ආකෘතිය වෙනස් කිරීම | DATE_FORMAT |
| වේලාව‑පමණක් ආකෘතිකරණය | TIME_FORMAT |
| String → datetime පරිවර්තනය | STR_TO_DATE |
| මිලිසෙකන්ඩ් දර්ශනය | %f |
4. MySQL දිනය සහ වේලාව එකතු/ඉවත් කිරීම (DATE_ADD / DATE_SUB)
වර්තමාන වේලාව ලබා ගත හැකි වුවද, “X දින පසු” හෝ “X පැය පසු” වැනි දිනය/වේලාව ගණනය නොකළහොත් නිෂ්පාදනයේ ප්රයෝජනවත් නොවේ.
මෙහිදී DATE_ADD() සහ DATE_SUB() ක්රියාකාරකම් MySQL හි වර්තමාන වේලාව සමඟ කෙසේ භාවිතා කරන්නේද යන්න පැහැදිලි කරමු.
4.1 MySQL datetime එකතු කිරීම: DATE_ADD()
මූලික වාක්ය රචනය:
sql
SELECT DATE_ADD(base_datetime, INTERVAL value unit);
උදාහරණය: දැන් සිට 7 දින
sql
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY);
උදාහරණය: 2 පැය පසු
sql
SELECT DATE_ADD(NOW(), INTERVAL 2 HOUR);
සාමාන්යයෙන් භාවිතා වන ඒකක
| ඒකක | අර්ථය |
|---|---|
| SECOND | තත්පර |
| MINUTE | මිනිත්තුව |
| HOUR | පැය |
| DAY | දින |
| MONTH | මාස |
| YEAR | අවුරුද්ද |
4.2 MySQL datetime ඉවත් කිරීම: DATE_SUB()
මූලික වාක්ය රචනය:
sql
SELECT DATE_SUB(base_datetime, INTERVAL value unit);
උදාහරණය: 30 දිනකට පෙර
sql
SELECT DATE_SUB(NOW(), INTERVAL 30 DAY);
උදාහරණය: 1 පැයකට පෙර
sql
SELECT DATE_SUB(NOW(), INTERVAL 1 HOUR);
භාවිතා අවස්ථා
– කල් ඉකුත් වීමේ පරීක්ෂා
– පැරණි ලොග් මකා දැමීම
– නවතම දත්ත ලබා ගැනීම
4.3 සාමාන්ය නිෂ්පාදන රටා
■ පසුගිය 24 පැය තුළ දත්ත ලබා ගැනීම
sql
SELECT * FROM logs WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 DAY);
■ 7 දින පසු අවසන් දිනය සකස් කිරීම
sql
INSERT INTO tasks (deadline) VALUES (DATE_ADD(NOW(), INTERVAL 7 DAY));
4.4 පොදු දෝෂ සහ අවධානම්
❌ තීරුවලට ක්රියාකාරකම් යෙදීම
නරක උදාහරණය:
WHERE DATE(created_at) = CURDATE();
මෙය ඉන්ඩෙක්ස් අක්රිය කරයි (විමසුම් කාර්ය සාධන අනුකූලනය).
නිර්දේශිතය:
WHERE created_at >= CURDATE() AND created_at < DATE_ADD(CURDATE(), INTERVAL 1 DAY);
❌ වේලා කලාප නොසලකා හරිනවා
NOW() සේවාදායකයේ වේලා කලාපය මත පදනම් වේ
ඔබ UTC තුළ සුරකින්නේ නම්, මූලිකය ලෙස UTC_TIMESTAMP() භාවිතා කරන්න
උදාහරණය:
SELECT DATE_ADD(UTC_TIMESTAMP(), INTERVAL 1 DAY);
❌ මාස එකතු කිරීමේ අවදානම්
SELECT DATE_ADD('2025-01-31', INTERVAL 1 MONTH);
→ මාස අවසාන සකස් කිරීම නිසා, දිනය වෙනස් විය හැක.
(පරිසරය අනුව ප්රතිඵලය 2025-02-28 විය හැක.)
මාස-අධාරිත ගණනයන් භාවිතා කිරීමට පෙර විශේෂණය තේරුම් ගන්න.
4.5 මිලිසෙකන්ඩ් සමඟ එකතු කිරීම
SELECT DATE_ADD(NOW(3), INTERVAL 500 MILLISECOND);
※ MySQL සෘජුවම MILLISECOND සහය නොදේ.
මයික්රොසෙකන්ඩ් ලෙස නියම කරන්න:
SELECT DATE_ADD(NOW(3), INTERVAL 500000 MICROSECOND);
4.6 හොඳ පුරුදු
NOW() හෝ UTC_TIMESTAMP() ඔබේ මූලිකය ලෙස ප්රමිතියක් කරගන්න
WHERE වාක්යයේ තීරුවලට ක්රියාකාරකම් යෙදවන්න එපා
මාස-අධාරිත එකතු කිරීමේ හැසිරීම තේරුම් ගන්න
නිශ්චිතතාව අවශ්ය නම්, DATETIME(3) හෝ ඉහළ භාවිතා කරන්න
5. MySQL හි දිනය/කාල වෙනස්කම් ගණනය කිරීම (DATEDIFF / TIMESTAMPDIFF)
නිෂ්පාදන පද්ධතිවල, වත්මන් කාලය ලබා ගැනීම පමණක් ප්රමාණවත් නොවේ. ඔබට කී දින ගතවී ඇත හෝ කී පැය ඉතිරිව ඇත යන ගණනය කිරීමට අවශ්ය වේ.
5.1 දිනය වෙනස්කම් ගණනය කිරීම: DATEDIFF()
DATEDIFF() දෙකේ දිනයන් අතර දින ගණන ගණනය කරයි.
SELECT DATEDIFF('2025-02-10', '2025-02-01');
ප්රතිඵලය
9
ප්රධාන කරුණු
- දින පමණක් වෙනස්කම ලබා දෙයි
- කාල කොටස නොසලකා හරිනවා
- ප්රතිඵලය ඍණ විය හැක
උදාහරණය: නිර්මාණය වූ දිනයෙන් පසු ගත වූ දින ගණනය කිරීම
SELECT DATEDIFF(NOW(), created_at)
FROM users;
5.2 ඒකක අනුව වෙනස්කම් ගණනය කිරීම: TIMESTAMPDIFF()
TIMESTAMPDIFF() ඔබට ඒකකය නියම කිරීමට ඉඩ දෙයි.
SELECT TIMESTAMPDIFF(unit, start_datetime, end_datetime);
උදාහරණය: පැය වෙනස්කම
SELECT TIMESTAMPDIFF(HOUR, '2025-02-01 10:00:00', '2025-02-01 15:00:00');
ප්රතිඵලය
5
පොදු ඒකක
| Unit | Meaning |
|---|---|
| SECOND | Seconds |
| MINUTE | Minutes |
| HOUR | Hours |
| DAY | Days |
| MONTH | Months |
| YEAR | Years |
උදාහරණය: ලොග් ඉන් වීමෙන් පසු මිනිත්තු ගණනය කිරීම
SELECT TIMESTAMPDIFF(MINUTE, login_at, NOW())
FROM users;
5.3 නිෂ්පාදන භාවිතා අවස්ථා
- සැසිය කාලය ඉක්මවන පරීක්ෂණ
- සාමාජිකත්ව කල් ඉකුත් වීමේ පරීක්ෂණ
- ලොග් වල ගත වූ කාලය ගණනය කිරීම
- අනුපාත සීමා කිරීමේ තර්කය
5.4 පොදු දෝෂ
❌ කාල නිශ්චිතතාව අවශ්ය වන විට DATEDIFF භාවිතා කිරීම
DATEDIFF() පැය සහ මිනිත්තු නොසලකා හරියි.
❌ පරාමිතීන් පිළිවෙල හරවා දැමීම
පිළිවෙල මෙසේය:
TIMESTAMPDIFF(unit, start, end)
හරවා දැමුවහොත්, ප්රතිඵලය ඍණ වේ.
❌ වේලා කලාප නොසලකා හරිනවා
UTC සහ ස්ථානීය කාලය මිශ්ර කරන්නේ නම්, වෙනස්කම් වැරදි විය හැක.
5.5 හොඳ පුරුදු
- කාල නිශ්චිතතාව වැදගත් වන විට
TIMESTAMPDIFF()භාවිතා කරන්න - සරල දින ගණනය සඳහා
DATEDIFF()භාවිතා කරන්න - වේලා කලාපය සමාන්යව භාවිතා කිරීම තහවුරු කරන්න
- බෙදා හැරුණු පද්ධතිවල UTC ප්රමිතියක් කරගන්න
6. වත්මන් කාලය භාවිතා කර දිනය පරාස විමසුම්
ආදර්ශ ලෝකයේ සාමාන්ය අවශ්යතාව之一 වන්නේ, විශේෂ කාල පරාසයක් තුළ රෙකෝඩ් ලබා ගැනීම, උදාහරණ ලෙස:
- අද දිනයේ රෙකෝඩ්
- පසුගිය 7 දින
- පසුගිය 24 පැය
- මේ මාසය
6.1 අද දිනයේ රෙකෝඩ් ලබා ගැනීම (ඉන්ඩෙක්ස්‑හිතකාමී)
SELECT *
FROM logs
WHERE created_at >= CURDATE()
AND created_at < DATE_ADD(CURDATE(), INTERVAL 1 DAY);
මෙය නිවැරදි වීමට හේතුව
- තීරුවට කිසිදු ක්රියාකාරකමක් යෙදෙන්නේ නැත
- ඉන්ඩෙක්ස් භාවිතා කළ හැක
- කාර්යක්ෂම පරාස විමසුම
6.2 පසුගිය 7 දින
SELECT *
FROM logs
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY);
6.3 පසුගිය 24 පැය
SELECT *
FROM logs
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 DAY);
6.4 මේ මාසය
SELECT *
FROM logs
WHERE created_at >= DATE_FORMAT(NOW(), '%Y-%m-01')
AND created_at < DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH);
නිෂ්පාදන පද්ධතිවල, යෙදුම් පැත්තේ සීමා ගණනය කර ඒවා පරාමිතීන් ලෙස පවරා ගැනීම සාමාන්යයෙන් වඩා හොඳය.
6.5 පොදු කාර්ය සාධන දෝෂ
❌ සූචිගත තීරුවලට ක්රියාකාරකම් යෙදීම
WHERE DATE(created_at) = CURDATE();
මෙය සූචි භාවිතය වැලැක්වීම සහ සම්පූර්ණ වගුවේ පරික්ෂණ සිදු කිරීමේ හේතුව වේ.
❌ BETWEEN අසභ්ය ලෙස භාවිත කිරීම
BETWEEN සම්පූර්ණ (ඇතුළත්) වන අතර එක් තත්පරයක් අඩු/අධික වීමේ ගැටළු ඇති කරයි.
6.6 හොඳ පුරුදු සාරාංශය
- දිනයන් පිරික්සීම සඳහා සෑම විටම පරාස කොන්දේසි භාවිතා කරන්න
- සූචිගත තීරුවලට ක්රියාකාරකම් යෙදීමෙන් වැළකින්න
- ගෝලීය පද්ධතිවල UTC ගබඩා කිරීම ප්රාථමික කරගන්න
- වේලා කලාප අනුමාන ගැන පැහැදිලි වන්න


