MySQL වර්තමාන වේලාව මාර්ගෝපදේශය: NOW(), CURRENT_TIMESTAMP, DATE_FORMAT, කාලකලාප සැකසුම් සහ හොඳ පුරුදු

目次

1. හැඳින්වීම

MySQL හි වත්මන් වේලාව කළමනාකරණය කිරීමට ඔබට කවදා අවශ්‍ය වේ?

MySQL හි, වත්මන් වේලාව ලබා ගැනීම විවිධ තත්ත්වයන්හි අවශ්‍ය වේ. උදාහරණයක් ලෙස, පහත භාවිතා අවස්ථා සාමාන්‍ය වේ:

  • දත්ත ලියාපදිංචි කරන විට ස්වයංක්‍රීයව කාල සළකුණක් ඇතුළත් කිරීම
  • උදාහරණයක් ලෙස, ඇණවුම් දත්ත හෝ ලොග් දත්ත සුරකිද්දී නිර්මාණ දිනය සහ වේලාව ලියා තබා ගැනීම.
  • වර්තමාන වේලාව මත දත්ත පෙරහන් කිරීම
  • උදාහරණයක් ලෙස, පසුගිය 7 දිනවල දත්ත පමණක් ලබා ගැනීම හෝ අනාගත දිනයන් සමඟ රෙකෝඩ් සොයීම.
  • දින සහ වේලාවන් ප්‍රදර්ශනය සඳහා ආකෘතිකරණය
  • වාර්තා සකස් කරන විට දින සහ වේලාවන්ගේ අගයන් වඩා හොඳින් කියවිය හැකි ලෙස ආකෘතිකරණය කිරීම.
  • වර්තමාන වේලාව භාවිතා කර දත්ත කල් ඉකුත් වීම කළමනාකරණය
  • උදාහරණයක් ලෙස, කූපනය තවමත් වලංගුදැයි වර්තමාන වේලාව සමඟ සැසඳීමෙන් තීරණය කිරීම.

ඔබට දැකගත හැකි පරිදි, MySQL හි වර්තමාන වේලාව නිවැරදිව ලබා ගැනීම සහ එය සැකසීම දත්ත ගබඩා කළමනාකරණයේ වැදගත් කුසලතාවකි.

ඔබ මෙම ලිපියෙන් ඉගෙන ගන්නා දේ

මෙම ලිපිය පහත විෂයයන් විස්තරාත්මකව පැහැදිලි කරයි:

  • MySQL හි වර්තමාන වේලාව ලබා ගැනීම කෙසේද (NOW(), CURRENT_TIMESTAMP ආදිය)
  • දින සහ වේලාවන්ගේ ආකෘති වෙනස් කිරීම කෙසේද (DATE_FORMAT() භාවිතා කරමින්)
  • වර්තමාන වේලාව භාවිතා කර දින සහ වේලාව ගණනය කිරීම (INTERVAL භාවිතා කරමින්)
  • කාල කලාපය වෙනස් කිරීම කෙසේද (SET SESSION time_zone භාවිතා කරමින්)
  • වර්තමාන වේලාව පෙරනිමි අගයක් ලෙස භාවිතා කිරීම (CURRENT_TIMESTAMP)
  • සාමාන්‍ය දෝෂ සහ ඒවා සකස් කිරීමේ ක්‍රම (FAQ)

MySQL හි “වර්තමාන වේලාව” කළමනාකරණයේ මූලික සිට උසස් භාවිතය දක්වා, මෙම මාර්ගෝපදේශය ප්‍රායෝගික SQL උදාහරණ ලබා දෙයි. අවසානය දක්වා කියවා බලන්න.

2. MySQL හි වර්තමාන වේලාව ලබා ගැනීම

MySQL හි වර්තමාන වේලාව ලබා ගැනීමට ඇති ක්‍රියාකාරකම් ලැයිස්තුව

MySQL වර්තමාන වේලාව ලබා ගැනීමට විවිධ ක්‍රියාකාරකම් ලබා දේ. ඒ අතර වෙනස්කම් තේරුම්ගෙන, සුදුසු ලෙස භාවිතා කරන්න.

FunctionReturnsExample
NOW()Current date and time (date + time)SELECT NOW();2025-02-11 16:00:00
CURRENT_TIMESTAMPSame as NOW() (SQL standard)SELECT CURRENT_TIMESTAMP;
CURDATE()Current date onlySELECT CURDATE();2025-02-11
CURTIME()Current time onlySELECT CURTIME();16:00:00

NOW() ක්‍රියාකාරකම

NOW() MySQL හි වර්තමාන වේලාව ලබා ගැනීමට සාමාන්‍යයෙන් භාවිතා වන ක්‍රියාකාරකමයි.
එය දිනය සහ වේලාව දෙකම 반환 කරයි.

SELECT NOW();

ප්‍රතිදානයේ උදාහරණය:

2025-02-11 16:00:00
  • NOW() වර්තමාන පද්ධති වේලාව 반환 කරයි.
  • කාල කලාපය මත බලපෑමක් ඇති බැවින්, ඔබේ පරිසරය අනුව ප්‍රදර්ශිත වේලාව වෙනස් විය හැක (“කාල කලාප සැකසුම්” කොටසෙහි විස්තරාත්මකව පැහැදිලි කර ඇත).

CURRENT_TIMESTAMP භාවිතා කිරීම

CURRENT_TIMESTAMP NOW() සමඟ සමාන ලෙස ක්‍රියා කරයි. එය SQL ප්‍රමිතියට අනුකූල වන අතර, අනෙකුත් දත්ත ගබඩා පද්ධති වලද භාවිතා කළ හැක.

SELECT CURRENT_TIMESTAMP;

ප්‍රතිදානයේ උදාහරණය:

2025-02-11 16:00:00

CURDATE() සමඟ දිනය පමණක් ලබා ගැනීම

CURDATE() ඔබට වර්තමාන දිනය (අවුරුදු, මාස, දිනය) පමණක් ලබා ගැනීමට අවශ්‍ය වන විට භාවිතා කරයි.

SELECT CURDATE();

ප්‍රතිදානයේ උදාහරණය:

2025-02-11

CURTIME() සමඟ වේලාව පමණක් ලබා ගැනීම

ඔබට වර්තමාන වේලාව (පැය, මිනිත්තු, තත්පර) පමණක් ලබා ගැනීමට අවශ්‍ය නම්, CURTIME() භාවිතා කරන්න.

SELECT CURTIME();

ප්‍රතිදානයේ උදාහරණය:

16:00:00

ඔබට කුමන ක්‍රියාකාරකම භාවිතා කළ යුතුද?

PurposeRecommended Function
Retrieve both date and timeNOW() or CURRENT_TIMESTAMP
Retrieve date onlyCURDATE()
Retrieve time onlyCURTIME()

3. MySQL හි වර්තමාන වේලාව ආකෘතිකරණය කිරීම

DATE_FORMAT() සමඟ අභිරුචි ආකෘතිකරණය

DATE_FORMAT() හි මූලික ව්‍යවස්ථාව

MySQL හි, DATE_FORMAT() ක්‍රියාකාරකම භාවිතා කර දින සහ වේලාවන්ගේ ආකෘතිය නිදහස්ව වෙනස් කළ හැක.

SELECT DATE_FORMAT(datetime_value, 'format_specifiers');

උදාහරණය: Convert NOW() to the YYYY/MM/DD HH:MM format

SELECT DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i');

ප්‍රතිදානය:

2025/02/11 16:45

සාමාන්‍ය ආකෘති නිරූපක ලැයිස්තුව

SpecifierMeaningExample (2025-02-11 16:45:30)
%Y4-digit year2025
%m2-digit month (01-12)02
%d2-digit day (01-31)11
%HHour (00-23, 24-hour format)16
%iMinutes (00-59)45
%sSeconds (00-59)30

TIME() සමඟ වේලාව කොටස පමණක් ලබා ගැනීම

NOW() විසින් 반환 කරන datetime වලින් වේලාව කොටස පමණක් ලබා ගැනීමට අවශ්‍ය නම්, TIME() ක්‍රියාකාරකම භාවිතා කරන්න.

SELECT TIME(NOW());

ප්‍රතිදානය:

16:45:30

YEAR(), MONTH(), සහ DAY() සමඟ කොටස් ලබා ගැනීම

විශේෂ කොටස් පමණක් ලබා ගැනීමට, පහත ක්‍රියාකාරකම් භාවිතා කරන්න.

FunctionReturnsSQLOutput Example (2025-02-11 16:45:30)
YEAR()YearSELECT YEAR(NOW());2025
MONTH()MonthSELECT MONTH(NOW());2
DAY()DaySELECT DAY(NOW());11

ආකෘතිකරණයේ ප්‍රායෝගික උදාහරණ

The following SQL is useful for trying various formats in practice.

SELECT 
    NOW() AS 'Original datetime',
    DATE_FORMAT(NOW(), '%Y/%m/%d') AS 'YYYY/MM/DD format',
    DATE_FORMAT(NOW(), '%H:%i:%s') AS 'HH:MM:SS',
    TIME(NOW()) AS 'Time only',
    YEAR(NOW()) AS 'Year',
    MONTH(NOW()) AS 'Month',
    DAY(NOW()) AS 'Day';

4. MySQL හි වත්මන් වේලාව භාවිතා කර දිනය/වේලාව ගණනය කිරීම

INTERVAL සමඟ එකතු/ඉවත් කිරීම

මූලික ව්‍යවස්ථාව

SELECT current_datetime + INTERVAL number unit;
SELECT current_datetime - INTERVAL number unit;

NOW() මත පදනම්ව වේලාව එකතු කිරීම

උදාහරණයක් ලෙස, “එක සතිය පසු” දිනය-වේලාව ලබා ගැනීමට:

SELECT NOW() + INTERVAL 7 DAY;

ප්‍රතිදානය උදාහරණය:

2025-02-18 16:30:00
UnitMeaningExample
SECONDSecondsNOW() + INTERVAL 10 SECOND
MINUTEMinutesNOW() + INTERVAL 5 MINUTE
HOURHoursNOW() + INTERVAL 2 HOUR
DAYDaysNOW() + INTERVAL 10 DAY
MONTHMonthsNOW() + INTERVAL 3 MONTH

DATEDIFF() භාවිතා කර දෙකේ දිනයන් අතර වෙනස්කම ගණනය කිරීම

SELECT DATEDIFF(NOW(), '2025-01-01');

ප්‍රතිදානය උදාහරණය:

30

BETWEEN භාවිතා කර දිනය පරාසයක් අනුව පෙරහන් කිරීම

SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';

5. MySQL වේලා කලාප සැකසුම්

වත්මන් වේලා කලාපය පරීක්ෂා කිරීම

SHOW VARIABLES LIKE '%time_zone%';

ප්‍රතිදානය උදාහරණය:

+------------------+----------------+
| Variable_name    | Value          |
+------------------+----------------+
| system_time_zone | UTC            |
| time_zone        | SYSTEM         |
+------------------+----------------+

සැසියකට අනුව වේලා කලාපය වෙනස් කිරීම

SET SESSION time_zone = 'Asia/Tokyo';

සේවාදායකයේ පෙරනිමි වේලා කලාපය වෙනස් කිරීම

වින්‍යාස ගොනුව (my.cnf) වෙත පහත සඳහන් එකතු කරන්න:

[mysqld]
default_time_zone = 'Asia/Tokyo'

UTC_TIMESTAMP සමඟ UTC වේලාව ලබා ගැනීම

SELECT UTC_TIMESTAMP();

CONVERT_TZ() සමඟ ප්‍රාදේශීය වේලාවට පරිවර්තනය කිරීම

SELECT CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', 'Asia/Tokyo');

6. MySQL හි වත්මන් වේලාව පෙරනිමි අගයක් ලෙස සකස් කිරීමේ ක්‍රමය

CURRENT_TIMESTAMP පෙරනිමි අගයක් ලෙස සකස් කිරීම

CREATE TABLE logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

ON UPDATE CURRENT_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
);

DATETIME සහ TIMESTAMP අතර වෙනස්කම

TypeAffected by Time ZoneCan Set CURRENT_TIMESTAMP as Default
TIMESTAMPYesYes
DATETIMENoNo

ඔබට NOW() පෙරනිමි අගයක් ලෙස භාවිතා කළ නොහැකි වීමට හේතුව සහ විසඳුම

ERROR 1067 (42000): Invalid default value for 'created_at'

විසඳුම:

CREATE TRIGGER set_created_at
BEFORE INSERT ON logs
FOR EACH ROW
SET NEW.created_at = NOW();

7. සාමාන්‍ය MySQL දෝෂ සහ විසඳුම් (FAQ)

NOW() පෙරනිමි අගයක් ලෙස භාවිතා කළ නොහැක

දෝෂ උදාහරණය

CREATE TABLE logs (
    created_at DATETIME DEFAULT NOW()
);
ERROR 1067 (42000): Invalid default value for 'created_at'

විසඳුම

CREATE TABLE logs (
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CURRENT_TIMESTAMP වේලාව වැරදියි

SHOW VARIABLES LIKE 'time_zone';

විසඳුම

SET SESSION time_zone = 'Asia/Tokyo';

NOW() ප්‍රතිඵලය පැය එකක් අඩුයි

SHOW VARIABLES LIKE 'system_time_zone';

විසඳුම

SET GLOBAL time_zone = 'Asia/Tokyo';

BETWEEN පරාස පෙරහන් කිරීම අපේක්ෂිත ලෙස ක්‍රියා නොකරයි

SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01' AND '2025-02-28';

විසඳුම

SELECT * FROM orders
WHERE created_at BETWEEN '2025-02-01 00:00:00' AND '2025-02-28 23:59:59';

8. MySQL හි වත්මන් වේලාව කළමනාකරණය සඳහා හොඳම ක්‍රියාමාර්ග

NOW() සහ CURRENT_TIMESTAMP භාවිතා කළ යුතු අවස්ථා

Use CaseRecommended
Retrieve the current time in a SELECT statementNOW()
Automatically set the current time during INSERTCURRENT_TIMESTAMP
Set as the default value of a TIMESTAMP columnCURRENT_TIMESTAMP

TIMESTAMP සහ DATETIME භාවිතා කළ යුතු අවස්ථා

Data TypeAffected by Time ZoneStorage Size
TIMESTAMPYes4 bytes
DATETIMENo8 bytes

UTC හි සුරකින්න සහ ප්‍රාදේශීය වේලාවට පරිවර්තනය කරන්න

SELECT CONVERT_TZ(event_time, 'UTC', 'Asia/Tokyo');

BETWEEN වෙනුවට >= සහ < භාවිතා කරන්න

SELECT * FROM orders
WHERE created_at >= '2025-02-01 00:00:00' 
AND created_at < '2025-03-01 00:00:00';

INTERVAL භාවිතය ප්‍රමිතීකරණය කරන්න

SELECT NOW() + INTERVAL 1 DAY;

පැරණි දත්ත නිසි ලෙස පිරිසිදු කරන්න

DELETE FROM logs WHERE created_at < NOW() - INTERVAL 1 YEAR LIMIT 1000;