MySQL දිනයන්ගේ සැසඳීම සහ සැකසීම: උදාහරණ සහ කාර්ය සාධන උපදෙස් සමඟ සම්පූර්ණ මාර්ගෝපදේශය

目次

1. හැඳින්වීම

Handling dates in MySQL is one of the most important aspects of database operations. For example, when aggregating sales data by date or searching records within a specific period, date comparison becomes essential.

MySQL හි දිනයන් කළමනාකරණය කිරීම දත්ත ගබඩා මෙහෙයුම් වල අතිශය වැදගත් අංගයක් වේ. උදාහරණයක් ලෙස, දිනය අනුව විකුණුම් දත්ත එකතු කිරීම හෝ නියමිත කාල සීමාවක රෙකෝඩ් සොයන විට, දිනයන් තරඟ කිරීම අත්‍යවශ්‍ය වේ.

This article explains everything from the basics of date manipulation and comparison in MySQL to advanced use cases and performance optimization techniques. It is designed to be useful for users at all levels, from beginners to intermediate developers.

මෙම ලිපිය MySQL හි දිනයන් සංස්කරණය සහ තරඟ කිරීමේ මූලික කරුණු සිට උසස් භාවිතා කේස් සහ කාර්ය සාධන අභිවෘද්ධි තාක්ෂණයන් දක්වා සියල්ල පැහැදිලි කරයි. එය ආරම්භකයන් සිට මධ්‍යම මට්ටමේ සංවර්ධකයන් දක්වා සියලු මට්ටමේ පරිශීලකයන්ට ප්‍රයෝජනවත් වන ලෙස නිර්මාණය කර ඇත.

2. MySQL දිනය දත්ත වර්ගයන්ගේ සමාලෝචනය

දිනය දත්ත වර්ගයන්ගේ වර්ග සහ ඒවායේ ලක්ෂණ

MySQL පහත සඳහන් ප්‍රධාන දිනය දත්ත වර්ග තුන ලබා දේ. පහත සෑම එකක් පිළිබඳ කෙටි විස්තරයක් ඇත.

  1. DATE
  • ගබඩා කරන අගය: වර්ෂ-මාස-දින ( YYYY-MM-DD )
  • ලක්ෂණ: වේලාව තොරතුරු ඇතුළත් නොවේ, එබැවින් සරල දිනයන් කළමනාකරණයට සුදුසු වේ.
  • භාවිතා කේස්: උපන්දිනයන්, අවසන් දිනයන්.
  1. DATETIME
  • ගබඩා කරන අගය: වර්ෂ-මාස-දින සහ වේලාව ( YYYY-MM-DD HH:MM:SS )
  • ලක්ෂණ: වේලාව තොරතුරු ඇතුළත් කරයි, එබැවින් නිරවද්‍ය කාල සටහන් රෙකෝඩ් කිරීම සඳහා සුදුසු වේ.
  • භාවිතා කේස්: නිර්මාණ කාල සටහන්, අවසන් යාවත්කාලීන කාල සටහන්.
  1. TIMESTAMP
  • ගබඩා කරන අගය: වර්ෂ-මාස-දින සහ වේලාව ( YYYY-MM-DD HH:MM:SS )
  • ලක්ෂණ: කාල කලාපය මත පදනම්ව, විවිධ ප්‍රදේශවල දිනය සහ වේලාව කළමනාකරණයට ප්‍රයෝජනවත් වේ.
  • භාවිතා කේස්: ලොග් දත්ත, ගනුදෙනු රෙකෝඩ්.

සුදුසු දත්ත වර්ගය තෝරා ගැනීම

  • වේලාව අවශ්‍ය නොවේ නම්, DATE තෝරන්න.
  • වේලාව අවශ්‍ය නම්, ඔබේ යෙදුමේ කාල කලාප අවශ්‍යතා අනුව DATETIME හෝ TIMESTAMP තෝරන්න.

නියැදි විමසුම

පහත සෑම දත්ත වර්ගයක් භාවිතා කරන උදාහරණයක් ඇත.

CREATE TABLE events (
    event_id INT AUTO_INCREMENT PRIMARY KEY,
    event_date DATE,
    event_datetime DATETIME,
    event_timestamp TIMESTAMP
);

3. දිනයන් තරඟ කිරීමේ ක්‍රම

මූලික තරඟ මෙහෙයුම් භාවිතා කිරීම

MySQL හි දිනයන් තරඟ කිරීම සඳහා පහත මෙහෙයුම් භාවිතා වේ.

  1. = (Equal)
  • නියමිත දිනයට ගැලපෙන රෙකෝඩ් ලබා ගනී.
    SELECT * FROM events WHERE event_date = '2025-01-01';
    
  1. > / < (Greater Than / Less Than)
  • නියමිත දිනයට පෙර හෝ පසු රෙකෝඩ් සොයයි.
    SELECT * FROM events WHERE event_date > '2025-01-01';
    
  1. <= / >= (Less Than or Equal / Greater Than or Equal)
  • නියමිත දිනය ඇතුළත් කරන පරාසයක් තුළ රෙකෝඩ් සොයයි.
    SELECT * FROM events WHERE event_date <= '2025-01-10';
    

BETWEEN භාවිතා කර පරාස විමසුම්

BETWEEN මෙහෙයුම ඔබට පහසුවෙන් දිනය පරාසයක් නියම කිරීමට ඉඩ දෙයි.

SELECT * FROM events 
WHERE event_date BETWEEN '2025-01-01' AND '2025-01-31';

වැදගත් සටහන:

  • BETWEEN ආරම්භක සහ අවසන් අගයන් දෙකම ඇතුළත් කරයි, එබැවින් ඔබේ පරාසයෙන් අවශ්‍ය දත්ත අහෝසි නොවීමට සැලකිල්ලෙන් සිටින්න.

4. දිනයන් අතර වෙනස්කම් ගණනය කිරීම

DATEDIFF ක්‍රියාවලිය භාවිතා කිරීම

DATEDIFF() ක්‍රියාවලිය දෙකක් අතර දිනයන් වෙනස්කම (දිනවලින්) ගණනය කරයි.

SELECT DATEDIFF('2025-01-10', '2025-01-01') AS days_difference;

ප්‍රතිඵලය:

  • 9 දින

TIMESTAMPDIFF ක්‍රියාවලිය භාවිතා කිරීම

TIMESTAMPDIFF() ක්‍රියාවලිය ඔබට වසර, මාස, දින, හෝ පැය වැනි විශේෂ ඒකකවල වෙනස්කම ගණනය කිරීමට ඉඩ දෙයි.

SELECT TIMESTAMPDIFF(MONTH, '2025-01-01', '2025-12-31') AS months_difference;

ප්‍රතිඵලය:

  • 11 මාස

5. දිනයන් එකතු කිරීම සහ අඩු කිරීම

INTERVAL වාක්‍යය භාවිතා කර දිනය සංස්කරණය

MySQL හි, INTERVAL වාක්‍යය භාවිතා කර දිනයකට වේලාව එකතු හෝ අඩු කළ හැක. මෙය ඔබට නියමිත කාල සීමාවකට පෙර හෝ පසු දිනයන් ලබා ගන්නා විමසුම් සකස් කිරීමට ඉඩ දෙයි.

දිනයකට එකතු කිරීම

INTERVAL භාවිතා කර දිනයකට වේලාව එකතු කිරීමේ උදාහරණය:

SELECT DATE_ADD('2025-01-01', INTERVAL 7 DAY) AS plus_seven_days;

ප්‍රතිඵලය:
2025-01-08

දිනයෙන් අඩු කිරීම

INTERVAL භාවිතා කර දිනයෙන් වේලාව අඩු කිරීමේ සමාන ක්‍රමයක් ඇත:

SELECT DATE_SUB('2025-01-01', INTERVAL 1 MONTH) AS minus_one_month;

ප්‍රතිඵල:
2024-12-01

භාවිත නඩුව: මතක් කිරීමේ පද්ධතිය

පහත දැක්වෙන්නේ සති අට දිනකට පෙර සිදුවූ සිදුවීම් ලබා ගන්නා උදාහරණ ප්‍රශ්නයකි, එය ස්වයංක්‍රීය මතක් කිරීමේ දැනුම්දීම සඳහා භාවිතා කළ හැක.

SELECT event_name, event_date 
FROM events 
WHERE event_date = DATE_SUB(CURDATE(), INTERVAL 7 DAY);

වත්මන් දිනය මත පදනම් වූ ගණනය

  • CURDATE() : වත්මන් දිනය ලබා දෙයි (YYYY-MM-DD).
  • NOW() : වත්මන් දිනය සහ වේලාව ලබා දෙයි (YYYY-MM-DD HH:MM:SS).

උදාහරණය: අද සිට සතියක් පසු දිනය ගණනය කරන්න.

SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY) AS next_week;

6. ප්‍රායෝගික ප්‍රශ්න උදාහරණ

නිශ්චිත දිනයකට වාර්තා ලබා ගන්න

නිශ්චිත දිනයට ගැලපෙන සිදුවීම් ලබා ගන්න.

SELECT * 
FROM events 
WHERE event_date = '2025-01-01';

දිනය පරාසයක් තුළ දත්ත ලබා ගන්න

සතියක පරාසයක් තුළ සිදුවීම් සොයන උදාහරණයක්.

SELECT * 
FROM events 
WHERE event_date BETWEEN '2025-01-01' AND '2025-01-07';

දිනය අනුව දත්ත එකතු කිරීම

මෙම ප්‍රශ්නය සෑම මාසයකම ලියාපදිංචි වූ සිදුවීම් ගණන ගණන කරයි.

SELECT MONTH(event_date) AS event_month, COUNT(*) AS total_events 
FROM events 
GROUP BY MONTH(event_date);

උදාහරණ ප්‍රතිඵල:

event_monthtotal_events
110
215

7. කාර්ය සාධන අභිලේඛනය

ඉන්ඩෙක්ස් භාවිතයෙන් කාර්යක්ෂම සෙවීම

දිනය තීරුවකට ඉන්ඩෙක්ස් සකස් කිරීම ප්‍රශ්න කාර්ය සාධනය ඉතා වැඩි දියුණු කරයි.

ඉන්ඩෙක්ස් නිර්මාණය

පහත SQL event_date තීරුවට ඉන්ඩෙක්ස් එකක් නිර්මාණය කරයි.

CREATE INDEX idx_event_date ON events(event_date);

ඉන්ඩෙක්ස් ප්‍රතිඵල පරීක්ෂා කිරීම

EXPLAIN භාවිතයෙන් ප්‍රශ්න ක්‍රියාත්මක සැලැස්ම පරීක්ෂා කළ හැක.

EXPLAIN SELECT * 
FROM events 
WHERE event_date = '2025-01-01';

කාර්යයන් භාවිතා කරන විට වැදගත් සටහන්

WHERE කොටසේ කාර්යයන් භාවිතා කිරීම ඉන්ඩෙක්ස් භාවිතය අක්‍රිය කරවිය හැක.

නරක උදාහරණ

පහත ප්‍රශ්නයේ, DATE() කාර්යය ඉන්ඩෙක්ස් භාවිතය තහනම් කරයි.

SELECT * 
FROM events 
WHERE DATE(event_date) = '2025-01-01';

ආදර්ශිත උදාහරණ

කාර්යයන් නොභාවිතා කර, අගයන් සෘජුවම සැසඳීම සුපිරි ය.

SELECT * 
FROM events 
WHERE event_date >= '2025-01-01' 
  AND event_date < '2025-01-02';

8. නිතර අසන ප්‍රශ්න (FAQ)

Q1: DATE සහ DATETIME අතර වෙනස කුමක්ද?

  • A1:
  • DATE: දිනය පමණක් ( YYYY-MM-DD ) ගබඩා කරයි. වේලාව අවශ්‍ය නොවූ විට භාවිතා කරන්න.
  • DATETIME: දිනය සහ වේලාව දෙකම ( YYYY-MM-DD HH:MM:SS ) ගබඩා කරයි. සිදුවීමේ නිශ්චිත කාල සටහන අවශ්‍ය විට භාවිතා කරන්න.

උදාහරණය:

CREATE TABLE examples (
    example_date DATE,
    example_datetime DATETIME
);

Q2: BETWEEN භාවිතයෙන් දිනය පරාසයක් නියම කරන විට මොනවා ගැන සැලකිල්ලට ගත යුතුද?

  • A2:
  • BETWEEN ආරම්භක සහ අවසාන දිනයන් දෙකම ඇතුළත් කරයි; අවසාන දිනයේ වේලාව නොමැති නම්, ඔබට අවශ්‍ය සියලු වාර්තා ලබා නොගත හැක.

උදාහරණය:

-- This query may not retrieve records such as "2025-01-31 23:59:59"
SELECT * 
FROM events 
WHERE event_date BETWEEN '2025-01-01' AND '2025-01-31';

ආදර්ශය:
අවසන වේලාව 23:59:59 ලෙස සපයන්න හෝ වේලාව නොසලකා හරින සැසඳීමක් භාවිතා කරන්න.

SELECT * 
FROM events 
WHERE event_date >= '2025-01-01' AND event_date < '2025-02-01';

Q3: කාල කලාප වෙනස්කම් කෙසේ හසුරවිය යුතුද?

  • A3: MySQL හි, TIMESTAMP වර්ගය කාල කලාපයට අනුව වෙනස් වේ. එයට විරුද්ධව, DATETIME වර්ගය ස්ථාවර අගයක් ගබඩා කරයි, කාල කලාපයෙන් බලපෑමක් නොලැබේ.

වත්මන් කාල කලාප සැකසුම පරීක්ෂා කරන්න:

SHOW VARIABLES LIKE 'time_zone';

කාල කලාප සැකසුම වෙනස් කරන්න:

SET time_zone = '+09:00'; -- Japan Standard Time (JST)

Q4: පසුගිය 30 දිනවල දත්ත ලබා ගැනීමට කෙසේද?

  • A4: CURDATE() හෝ NOW() සමඟ INTERVAL එකතු කර පසුගිය 30 දිනවල දත්ත ලබා ගත හැක.

උදාහරණය:

SELECT * 
FROM events 
WHERE event_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY);

Q5: දින සංසන්දන වල කාර්ය සාධනය වැඩිදියුණු කර ගැනීමට මොනවා කළ හැකිද?

  • A5:
  • ඉන්ඩෙක්ස් සෑදීම: දින තීරුවල ඉන්ඩෙක්ස් එකක් සකසන්න.
  • කාර්යයන් භාවිතා කිරීමෙන් වැළකින්න: WHERE කොටසේ කාර්යයන් භාවිතා කිරීම ඉන්ඩෙක්ස් අක්‍රිය කරවිය හැක, එබැවින් සෘජු සංසන්දන භාවිතා කරන්න.

9. සාරාංශය

මෙම ලිපියේ ප්‍රධාන කරුණු

මෙම ලිපිය MySQL හි දින සැකසීම සහ සංසන්දන තාක්ෂණයන් පිළිබඳ සවිස්තරාත්මක විස්තරයක් ලබා දී ඇත. ප්‍රධාන සාරාංශය පහත පරිදි වේ:

  1. දින දත්ත වර්ග (DATE, DATETIME, TIMESTAMP) වල ලක්ෂණ සහ නිවැරදි භාවිතය අවබෝධ කර ගැනීම.
  2. මූලික සංසන්දන ක්‍රම ( = , > , < , BETWEEN , ආදිය).
  3. දින වෙනස්කම් ගණනය කිරීම ( DATEDIFF() , TIMESTAMPDIFF() ).
  4. ඉන්ඩෙක්සිං සහ සුදුසු විමසුම් සැලසුම් මගින් කාර්ය සාධනය වැඩිදියුණු කිරීම.

මෙම මාර්ගෝපදේශය MySQL හි දින මෙහෙයුම් කාර්යක්ෂමව කළමනාකරණය කිරීමට සහ වාස්තුක, සුදුසු විමසුම් සංවර්ධනය කිරීමට ඔබට උපකාරී වේ යැයි අපි බලාපොරොත්තු වෙමු.