- 1 1. MySQL में वर्तमान तिथि/समय प्राप्त करने के लिए सबसे छोटा SQL
- 1.1 1.1 वर्तमान तिथि/समय प्राप्त करें (बेसिक)
- 1.2 1.2 केवल आज की तिथि प्राप्त करें
- 1.3 1.3 केवल वर्तमान समय प्राप्त करें
- 1.4 1.4 UTC में वर्तमान समय प्राप्त करें (महत्वपूर्ण)
- 1.5 1.5 मिलीसेकंड / माइक्रोसेकंड प्राप्त करें
- 1.6 1.6 उपयोग केस के अनुसार सर्वोत्तम फ़ंक्शन (यदि अनिश्चित हों तो यहाँ से शुरू करें)
- 1.7 अक्सर लोग जो मुख्य बिंदु भूल जाते हैं
- 2 2. NOW() / CURRENT_TIMESTAMP / SYSDATE() के बीच अंतर
- 3 3. वर्तमान तिथि/समय के प्रदर्शन स्वरूप को बदलें
- 4 4. वर्तमान समय का उपयोग करके datetime गणनाएँ
- 4.1 4.1 INTERVAL के साथ जोड़/घटाएँ
- 4.2 4.2 पिछले 24 घंटे का डेटा प्राप्त करें (सबसे आम पैटर्न)
- 4.3 4.3 DATEDIFF() के साथ दिन अंतर प्राप्त करें
- 4.4 4.4 घंटे/मिनट/सेकंड के लिए TIMESTAMPDIFF() का उपयोग करें
- 4.5 4.5 महीने की शुरुआत / महीने का अंत प्राप्त करें (सामान्य वास्तविक‑दुनिया का जाल)
- 4.6 सामान्य गलतियों का सारांश
- 4.7 इस अनुभाग से मुख्य निष्कर्ष
- 5 5. रेंज क्वेरी के लिए, यह BETWEEN से अधिक सुरक्षित है
- 6 6. DEFAULT CURRENT_TIMESTAMP और ON UPDATE (टेबल डिज़ाइन मूल बातें)
- 6.1 6.1 created_at को स्वचालित सेट करें (DEFAULT CURRENT_TIMESTAMP)
- 6.2 6.2 updated_at को स्वचालित अद्यतन (ON UPDATE)
- 6.3 6.3 DATETIME बनाम TIMESTAMP (महत्वपूर्ण)
- 6.4 6.4 CURRENT_TIMESTAMP को DATETIME के साथ भी उपयोग किया जा सकता है
- 6.5 6.5 यदि आप NOW() का उपयोग करना चाहते हैं: एक वैकल्पिक (ट्रिगर)
- 6.6 सामान्य डिज़ाइन त्रुटियाँ
- 6.7 इस अनुभाग के मुख्य बिंदु
- 7 7. टाइम ज़ोन डिज़ाइन (store in UTC, display in local time)
- 7.1 7.1 वर्तमान टाइम ज़ोन जांचें
- 7.2 7.2 सत्र के अनुसार टाइम ज़ोन बदलें
- 7.3 7.3 क्यों UTC में संग्रहित करें (वास्तविक दुनिया का सिद्धांत)
- 7.4 7.4 CONVERT_TZ() के साथ टाइम ज़ोन बदलें
- 7.5 7.5 CONVERT_TZ() NULL क्यों लौटाता है
- 7.6 7.6 सर्वर-व्यापी टाइम ज़ोन बदलें
- 7.7 सामान्य गलतियाँ
- 7.8 इस अनुभाग के मुख्य बिंदु
- 8 8. व्यावहारिक उदाहरण जिन्हें आप जैसा है वैसा उपयोग कर सकते हैं
- 8.1 8.1 लॉग में वर्तमान समय को स्वचालित रूप से डालें
- 8.2 8.2 अंतिम लॉगिन समय अपडेट करें
- 8.3 8.3 बैच जॉब्स में एक संदर्भ समय को फिक्स करें
- 8.4 8.4 आज / कल / पिछले 7 दिनों के लिए एग्रीगेशन
- 8.5 8.5 समाप्ति जांच (सेशन/टोकन)
- 8.6 8.6 N घंटे के भीतर समाप्त होने वाली पंक्तियों को प्राप्त करें
- 8.7 आपको हमेशा याद रखना चाहिए
- 8.8 इस अनुभाग से मुख्य निष्कर्ष
- 9 9. अक्सर पूछे जाने वाले प्रश्न (FAQ)
- 9.1 9.1 NOW() और CURRENT_TIMESTAMP में क्या अंतर है?
- 9.2 9.2 क्या आपको SYSDATE() का उपयोग करना चाहिए?
- 9.3 9.3 समय क्यों शिफ्ट हो रहा है?
- 9.4 9.4 CONVERT_TZ() returns NULL
- 9.5 9.4 CONVERT_TZ() NULL लौटाता है
- 9.6 9.5 Range shifts with BETWEEN
- 9.7 9.5 BETWEEN के साथ रेंज शिफ्ट
- 9.8 9.6 How do you choose between DATETIME and TIMESTAMP?
- 9.9 9.6 DATETIME और TIMESTAMP में से कैसे चुनें?
- 9.10 9.7 Microseconds aren’t being stored
- 9.11 9.7 माइक्रोसेकंड संग्रहीत नहीं हो रहे हैं
- 9.12 Key takeaways from this section
- 9.13 इस अनुभाग से मुख्य निष्कर्ष
- 10 10. Summary
- 11 10. सारांश
- 11.1 10.1 Getting the current time (basics)
- 11.2 10.1 वर्तमान समय प्राप्त करना (बुनियादी)
- 11.3 10.2 Range queries: “>= AND <” is the golden rule
- 11.4 10.2 रेंज क्वेरी: “>= AND <” स्वर्ण नियम है
- 11.5 10.3 Datetime arithmetic basics
- 11.6 10.3 डेटटाइम अंकगणित मूल बातें
- 11.7 10.4 Time zone design principles
- 11.8 10.4 टाइम ज़ोन डिज़ाइन सिद्धांत
- 11.9 10.5 Table design best practices
- 11.10 10.5 तालिका डिज़ाइन सर्वोत्तम प्रथाएँ
- 11.11 The 4 most important real-world points
- 11.12 4 सबसे महत्वपूर्ण वास्तविक-विश्व बिंदु
1. MySQL में वर्तमान तिथि/समय प्राप्त करने के लिए सबसे छोटा SQL
यदि आप MySQL में वर्तमान तिथि/समय प्राप्त करना चाहते हैं, तो याद रखने वाले पहले फ़ंक्शन NOW() और CURRENT_TIMESTAMP हैं। नीचे उपयोग केस के अनुसार सबसे छोटे SQL उदाहरण दिए गए हैं।
1.1 वर्तमान तिथि/समय प्राप्त करें (बेसिक)
SELECT NOW();
या
SELECT CURRENT_TIMESTAMP;
- दोनों वर्तमान तिथि/समय (YYYY-MM-DD HH:MM:SS) लौटाते हैं।
- समान क्वेरी में, समय “क्वेरी शुरू होने का समय” पर स्थिर रहता है।
उपयोग केस
- लॉगिंग
- रिकॉर्ड निर्माण टाइमस्टैम्प प्राप्त करना
- संदर्भ समय प्राप्त करना
सामान्य गलती
- एप्लिकेशन का टाइम ज़ोन और डेटाबेस का टाइम ज़ोन अलग होते हैं और “समय शिफ्ट” होता है। →
SELECT @@session.time_zone;के साथ जांचें।
1.2 केवल आज की तिथि प्राप्त करें
SELECT CURDATE();
- रिटर्न फ़ॉर्मेट:
YYYY-MM-DD - प्रकार DATE (सिर्फ तिथि, datetime नहीं) है
उपयोग केस
- “आज का डेटा” खोज रहे हैं
- दैनिक एग्रीगेशन
नोट्स
NOW()के विपरीत, इसमें समय शामिल नहीं है।- यदि रेंज क्वेरी के लिए समय चाहिए, तो
NOW()का उपयोग करें।
1.3 केवल वर्तमान समय प्राप्त करें
SELECT CURTIME();
- रिटर्न फ़ॉर्मेट:
HH:MM:SS - प्रकार TIME (सिर्फ समय) है
उपयोग केस
- बैच निष्पादन समय दिखाना
- लॉग में केवल समय भाग प्रिंट करना
सामान्य त्रुटि
- क्योंकि इसमें तिथि नहीं है, आप इसे datetime तुलना के लिए उपयोग नहीं कर सकते।
1.4 UTC में वर्तमान समय प्राप्त करें (महत्वपूर्ण)
SELECT UTC_TIMESTAMP();
- सर्वर टाइम ज़ोन की परवाह किए बिना UTC लौटाता है।
- वैश्विक सेवाओं के लिए अनुशंसित।
वास्तविक प्रोजेक्ट्स में बेसलाइन नीति
- UTC में संग्रहीत करें
- प्रदर्शित करते समय स्थानीय समय में परिवर्तित करें
नोट्स
- यदि एप्लिकेशन पहले से ही UTC में बदलता है, तो दोहरी रूपांतरण से सावधान रहें।
1.5 मिलीसेकंड / माइक्रोसेकंड प्राप्त करें
SELECT NOW(3); -- milliseconds (3 digits after the decimal point)
SELECT NOW(6); -- microseconds (6 digits after the decimal point)
- MySQL 5.6.4 और बाद के संस्करणों में उपलब्ध।
- उच्च-परिशुद्धता लॉग और लेनदेन ऑडिटिंग के लिए उपयोग किया जाता है।
सामान्य गलतफहमी
- केवल
NOW()अंशीय सेकंड नहीं लौटाता। - आपके कॉलम को भी परिशुद्धता निर्दिष्ट करनी होगी, जैसे
DATETIME(6)।
1.6 उपयोग केस के अनुसार सर्वोत्तम फ़ंक्शन (यदि अनिश्चित हों तो यहाँ से शुरू करें)
| Use case | Recommended function |
|---|---|
| General current datetime | NOW() |
| Table default value | CURRENT_TIMESTAMP |
| Date only | CURDATE() |
| Time only | CURTIME() |
| Unified UTC management | UTC_TIMESTAMP() |
| High-precision logs | NOW(6) |
अक्सर लोग जो मुख्य बिंदु भूल जाते हैं
NOW()औरCURRENT_TIMESTAMPप्रभावी रूप से समान हैं (एक ही मान)।- समान क्वेरी में, समय स्थिर रहता है।
- प्रदर्शित मान टाइम ज़ोन सेटिंग्स के अनुसार बदलता है।
- माइक्रोसेकंड के लिए, आपके कॉलम परिभाषा में परिशुद्धता निर्दिष्ट होनी चाहिए।
2. NOW() / CURRENT_TIMESTAMP / SYSDATE() के बीच अंतर
वर्तमान समय प्राप्त करने के कई फ़ंक्शन हैं, लेकिन सबसे भ्रमित करने वाला भाग NOW(), CURRENT_TIMESTAMP, और SYSDATE() के बीच का अंतर है।
यदि आप इसे सही से नहीं समझते, तो लॉग और लेनदेन प्रोसेसिंग में अप्रत्याशित व्यवहार हो सकता है।
2.1 NOW() और CURRENT_TIMESTAMP प्रभावी रूप से समान हैं
SELECT NOW(), CURRENT_TIMESTAMP;
- दोनों वर्तमान datetime (एक DATETIME मान) लौटाते हैं।
- समान क्वेरी में, समय “क्वेरी शुरू होने का समय” पर स्थिर रहता है।
CURRENT_TIMESTAMPको फ़ंक्शन‑कॉल सिंटैक्स के साथ भी उपयोग किया जा सकता है:SELECT CURRENT_TIMESTAMP();
वास्तविक प्रोजेक्ट्स में कैसे चुनें
| Use case | Recommended |
|---|---|
| Simple retrieval | NOW() |
| Table DEFAULT / ON UPDATE | CURRENT_TIMESTAMP |
महत्वपूर्ण बिंदु
- प्राप्त मान का अर्थ समान है।
- मुख्य अंतर सिंटैक्स/उपयोग में है (जैसे, DEFAULT में अनुमति)।
- यह प्रकार का अंतर नहीं है (समझने में आसान)।
2.2 SYSDATE() “मूल्यांकन समय” पर समय लौटाता है
SYSDATE() NOW() जैसा दिखता है, लेकिन मान कब स्थिर किया जाता है, इसका समय अलग है।
SELECT NOW(), SLEEP(2), NOW();
परिणाम (उदाहरण):
2025-02-23 14:00:00
2025-02-23 14:00:00
SELECT SYSDATE(), SLEEP(2), SYSDATE();
परिणाम (उदाहरण):
2025-02-23 14:00:00
2025-02-23 14:00:02
मुख्य अंतर
| Function | When the time is fixed |
|---|---|
NOW() | Query start time |
SYSDATE() | Evaluation time |
2.3 लेन‑देन और प्रतिकृति के लिए नोट्स
क्योंकि NOW() क्वेरी की शुरुआत में स्थिर रहता है, यह
लेन‑देन के भीतर एक सुसंगत संदर्भ समय की आवश्यकता होने पर अधिक सुरक्षित।
दूसरी ओर, क्योंकि SYSDATE() निष्पादन समय पर निर्भर करता है, यह पुनरुत्पादनशीलता को प्रभावित कर सकता है:
- प्रतिकृति
- बैच कार्य
- बड़े पैमाने पर लॉग प्रोसेसिंग
सामान्य नियम
- स्थिर संदर्भ समय चाहिए →
NOW() - हर बार सटीक क्षण चाहिए →
SYSDATE()(सीमित उपयोग)
2.4 नोट: CURRENT_DATE / CURRENT_TIME / LOCALTIME
MySQL भी समर्थन करता है:
SELECT CURRENT_DATE;
SELECT CURRENT_TIME;
SELECT LOCALTIME;
CURRENT_DATE→CURDATE()के समानCURRENT_TIME→CURTIME()के समानLOCALTIME→NOW()के समान
सामान्य भ्रम
- ये अधिकांशतः “सौंदर्यात्मक अंतर” हैं; कार्यात्मक अंतर बहुत कम है।
- सुरक्षा के लिए, पठनीयता को प्राथमिकता दें और परियोजना के भीतर मानकीकरण करें।
इस अनुभाग के मुख्य बिंदु
NOW()औरCURRENT_TIMESTAMPमूलतः एक ही अर्थ रखते हैं।SYSDATE()अलग व्यवहार करता है क्योंकि यह मूल्यांकन समय पर आधारित है।- स्थिर संदर्भ समय के लिए, डिफ़ॉल्ट रूप में
NOW()का उपयोग करें। CURRENT_TIMESTAMPका उपयोग DEFAULT और ON UPDATE के लिए करें।
3. वर्तमान तिथि/समय के प्रदर्शन स्वरूप को बदलें
NOW() से प्राप्त वर्तमान समय डिफ़ॉल्ट रूप से YYYY-MM-DD HH:MM:SS के रूप में प्रदर्शित होता है। वास्तविक कार्य में, आपको अक्सर निम्नलिखित की आवश्यकता होती है:
- केवल तिथि दिखाएँ
YYYY/MM/DDका उपयोग करें- स्थानीय स्वरूप उपयोग करें (उदाहरण: 23 फ़रवरी, 2025)
- मिलीसेकंड दिखाएँ
इसके लिए, DATE_FORMAT() (datetime को किसी भी स्ट्रिंग स्वरूप में बदलता है) का उपयोग करें।
3.1 DATE_FORMAT() की मूल सिंटैक्स
DATE_FORMAT(datetime, 'format_string')
उदाहरण: वर्तमान समय को YYYY/MM/DD HH:MM में बदलें
SELECT DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i');
आउटपुट उदाहरण:
2025/02/23 14:35
सामान्य स्वरूप संकेतक
| Specifier | Meaning | Example |
|---|---|---|
%Y | 4-digit year | 2025 |
%m | 2-digit month | 02 |
%d | 2-digit day | 23 |
%H | Hour (24-hour) | 14 |
%i | Minutes | 35 |
%s | Seconds | 50 |
%f | Microseconds | 123456 |
नोट्स
- कुछ संकेतक बड़े/छोटे अक्षर में अलग होते हैं।
%h12‑घंटे का समय है,%H24‑घंटे का समय है।
3.2 सामान्य स्वरूप उदाहरण (वास्तविक कार्य में अक्सर उपयोगी)
1. स्लैश‑विभाजित
SELECT DATE_FORMAT(NOW(), '%Y/%m/%d');
2. स्थानीय (अंग्रेज़ी)
SELECT DATE_FORMAT(NOW(), '%b %d, %Y');
3. बिना सेकंड के
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i');
सामान्य गलती
- क्योंकि यह एक स्ट्रिंग लौटाता है, आप इसे संख्यात्मक गणनाओं के लिए उपयोग नहीं कर सकते।
- तुलनाओं और खोजों के लिए, आपको मूल DATETIME प्रकार का उपयोग करना चाहिए।
3.3 केवल तिथि या समय भाग निकालें
आप प्रकार को बनाए रखते हुए भागों को प्राप्त कर सकते हैं (स्ट्रिंग में फ़ॉर्मेट करने के बजाय)।
SELECT DATE(NOW()); -- date only (DATE type)
SELECT TIME(NOW()); -- time only (TIME type)
SELECT YEAR(NOW()); -- year only
SELECT MONTH(NOW()); -- month only
SELECT DAY(NOW()); -- day only
सिफ़ारिश किया गया उपयोग
| Goal | Recommended |
|---|---|
| Formatting for display | DATE_FORMAT |
| Calculation / comparison | DATE() / TIME() |
3.4 माइक्रोसेकंड के साथ प्रदर्शित करें
जब आपको उच्च‑सटीकता वाले लॉग चाहिए:
SELECT NOW(6);
फ़ॉर्मेटिंग के साथ:
SELECT DATE_FORMAT(NOW(6), '%Y-%m-%d %H:%i:%s.%f');
महत्वपूर्ण नोट्स
- आपका कॉलम
DATETIME(6)याTIMESTAMP(6)होना चाहिए, अन्यथा सटीकता संग्रहीत नहीं होगी। 5.6.4से पुराने MySQL संस्करणों में उपलब्ध नहीं है (पर्यावरण‑निर्भर)।
सामान्य गलतियाँ
WHERE क्लॉज़ में
DATE_FORMAT()का उपयोग करने से इंडेक्स उपयोग नहीं हो पाते। wp:list /wp:list- Bad example:
WHERE DATE_FORMAT(created_at, '%Y-%m-%d') = '2025-02-23' - Recommended:
WHERE created_at >= '2025-02-23 00:00:00' AND created_at < '2025-02-24 00:00:00' - डिस्प्ले‑फ़ॉर्मेटेड स्ट्रिंग को सीधे संग्रहीत करना (खोज प्रदर्शन को नुकसान पहुँचाता है)
- Bad example:
इस अनुभाग के मुख्य बिंदु
DATE_FORMAT()का उपयोग करके डिस्प्ले स्वरूप बदलें।- गणनाओं/तुलनाओं के लिए, मूल प्रकार को रखें।
- यदि आपको माइक्रोसेकंड चाहिए, तो कॉलम परिभाषा में सटीकता निर्दिष्ट करें।
- WHERE क्लॉज़ में फ़ंक्शन का उपयोग करने से प्रदर्शन समस्याएँ हो सकती हैं।
4. वर्तमान समय का उपयोग करके datetime गणनाएँ
In MySQL, यह सामान्य है कि आप वर्तमान समय के आधार पर “N घंटे बाद”, “N दिन पहले”, या “पिछले N दिन” जैसी चीज़ें गणना करें।
सबसे आम वास्तविक‑दुनिया का मामला “पिछले 24 घंटे का डेटा प्राप्त करना” है।
datetime अंकगणित की नींव INTERVAL है (समय इकाइयों को जोड़ने/घटाने की सिंटैक्स)।
4.1 INTERVAL के साथ जोड़/घटाएँ
1 घंटे बाद प्राप्त करें
SELECT NOW() + INTERVAL 1 HOUR;
3 दिन पहले प्राप्त करें
SELECT NOW() - INTERVAL 3 DAY;
1 महीने बाद प्राप्त करें
SELECT NOW() + INTERVAL 1 MONTH;
सामान्य इकाइयाँ
| Unit | Meaning |
|---|---|
| SECOND | Seconds |
| MINUTE | Minutes |
| HOUR | Hours |
| DAY | Days |
| WEEK | Weeks |
| MONTH | Months |
| YEAR | Years |
सामान्य गलतियाँ
INTERVAL 1 DAYमेंDAYछोटे अक्षरों में भी काम करता है, लेकिन टीम में मानकीकरण करना चाहिए।- महीने के अंत की गणनाएँ अपेक्षाओं से भिन्न हो सकती हैं क्योंकि दिनों की संख्या बदलती रहती है (उदाहरण: 31 जनवरी + 1 महीना)।
4.2 पिछले 24 घंटे का डेटा प्राप्त करें (सबसे आम पैटर्न)
SELECT *
FROM users
WHERE created_at >= NOW() - INTERVAL 1 DAY;
अर्थ
- लक्ष्य “अब से लेकर 24 घंटे पहले तक” है।
नोट्स
- यदि आप
CURDATE()का उपयोग करते हैं, तो आधार “आज 00:00” बन जाता है, जिससे अर्थ बदल जाता है।
उदाहरण (आज का डेटा):
SELECT *
FROM users
WHERE created_at >= CURDATE();
अंतर को समझना महत्वपूर्ण है
| Expression | Meaning |
|---|---|
NOW() - INTERVAL 1 DAY | Past 24 hours |
CURDATE() | Since today 00:00 |
4.3 DATEDIFF() के साथ दिन अंतर प्राप्त करें
SELECT DATEDIFF('2025-03-01', '2025-02-23');
परिणाम:
6
- इकाई “दिन” है
- समय भाग को अनदेखा किया जाता है
नोट्स
- तर्क क्रम के आधार पर संकेत बदलता है।
- आप घंटे/मिनट/सेकंड में अंतर नहीं निकाल सकते।
4.4 घंटे/मिनट/सेकंड के लिए TIMESTAMPDIFF() का उपयोग करें
SELECT TIMESTAMPDIFF(HOUR,
'2025-02-23 12:00:00',
'2025-02-23 18:30:00');
परिणाम:
6
मिनट
SELECT TIMESTAMPDIFF(MINUTE,
'2025-02-23 12:00:00',
'2025-02-23 12:30:00');
सेकंड
SELECT TIMESTAMPDIFF(SECOND,
'2025-02-23 12:00:00',
'2025-02-23 12:00:45');
उपयोग के मामले
- सत्र अवधि की गणना
- समाप्ति जांच
- टाइमआउट निर्णय
4.5 महीने की शुरुआत / महीने का अंत प्राप्त करें (सामान्य वास्तविक‑दुनिया का जाल)
इस महीने का पहला दिन प्राप्त करें:
SELECT DATE_FORMAT(NOW(), '%Y-%m-01');
अगले महीने का पहला दिन:
SELECT DATE_FORMAT(NOW() + INTERVAL 1 MONTH, '%Y-%m-01');
नोट्स
- महीने का अंत एक निश्चित तिथि नहीं है।
- रेंज क्वेरी के लिए, “>= start AND < अगले महीने का पहला दिन” सुरक्षित है।
सामान्य गलतियों का सारांश
- केवल तिथि मानों के साथ
BETWEENका उपयोग करना और समय भूल जाना - WHERE क्लॉज़ में
DATE(created_at)का उपयोग करके इंडेक्स निष्क्रिय करना - महीने की गणना में “31वाँ दिन” समस्या में फँसना
NOW()औरCURDATE()के बीच अंतर को न समझ पाना
इस अनुभाग से मुख्य निष्कर्ष
INTERVALdatetime अंकगणित की नींव है।- पिछले 24 घंटे =
NOW() - INTERVAL 1 DAY। - दिन =
DATEDIFF(); छोटे इकाइयाँ =TIMESTAMPDIFF()। - महीने‑आधारित गणनाओं के अंत शर्तों के साथ सावधान रहें।
5. रेंज क्वेरी के लिए, यह BETWEEN से अधिक सुरक्षित है
MySQL में तिथि रेंज खोज करते समय, कई शुरुआती BETWEEN का उपयोग करते हैं। हालांकि, यदि आप समय सीमाओं को सही से संभालते नहीं हैं तो यह अक्सर अनपेक्षित परिणाम देता है, इसलिए वास्तविक कार्य में एक सुरक्षित पैटर्न की सिफारिश की जाती है।
5.1 BETWEEN की मूल बातें और जाल
एक सामान्य क्वेरी
SELECT *
FROM orders
WHERE order_date BETWEEN '2025-02-01' AND '2025-02-10';
यह ठीक लगती है, लेकिन आंतरिक रूप से यह बराबर है:
WHERE order_date >= '2025-02-01 00:00:00'
AND order_date <= '2025-02-10 00:00:00'
इसलिए यह 10 फ़रवरी को 00:00 के बाद का डेटा शामिल नहीं करता।
5.2 सुरक्षित पैटर्न (सिफारिश किया गया)
सिफारिश किया गया पैटर्न
SELECT *
FROM orders
WHERE order_date >= '2025-02-01 00:00:00'
AND order_date < '2025-02-11 00:00:00';
मुख्य बिंदु
- अंत सीमा को “अगले दिन के 00:00 से कम” के रूप में निर्दिष्ट करें
<= 23:59:59से अधिक सुरक्षित (माइक्रोसेकंड का समर्थन करता है)
5.3 आज के डेटा को प्राप्त करने का सही तरीका
खराब उदाहरण:
WHERE DATE(created_at) = CURDATE();
समस्याएँ:
- कॉलम पर फ़ंक्शन लागू करने से इंडेक्स निष्क्रिय हो जाते हैं
- बड़े तालिकाओं में गंभीर धीमी गति का कारण बन सकता है
सिफ़ारिश:
WHERE created_at >= CURDATE()
AND created_at < CURDATE() + INTERVAL 1 DAY;
यह सुनिश्चित करता है:
- इंडेक्स का उपयोग किया जा सकता है
- तेज़ खोज
- कोई सीमा समस्या नहीं
5.4 पिछले 7 / पिछले 30 दिनों के लिए सुरक्षित पैटर्न
पिछले 7 दिन
WHERE created_at >= NOW() - INTERVAL 7 DAY;
पिछले 30 दिन
WHERE created_at >= NOW() - INTERVAL 30 DAY;
नोट्स
CURDATE() - INTERVAL 7 DAY“आज 00:00” पर आधारित हैNOW() - INTERVAL 7 DAY“वर्तमान समय” पर आधारित है- आवश्यकताओं के आधार पर चुनें
5.5 इंडेक्स को प्रभावी रखने का मुख्य नियम
खराब:
WHERE DATE(created_at) = '2025-02-23';
अच्छा:
WHERE created_at >= '2025-02-23 00:00:00'
AND created_at < '2025-02-24 00:00:00';
क्यों:
- इंडेक्स “कॉलम स्वयं” पर काम करते हैं
- फ़ंक्शन लागू करने से इंडेक्स उपयोग रोकता है (पूर्ण स्कैन)
सामान्य गलतियों का सारांश
BETWEENमें अंत सीमा पर समय शामिल करना भूलना23:59:59का उपयोग करते समय माइक्रोसेकंड छूट जाना- WHERE क्लॉज़ में
DATE()का उपयोग और क्वेरी धीमी होना - “now” बनाम “today 00:00” को अस्पष्ट छोड़ना
इस अनुभाग से मुख्य निष्कर्ष
- रेंज क्वेरी सबसे सुरक्षित
>= start AND < endके साथ हैं। BETWEENको सावधानीपूर्वक सीमा प्रबंधन की आवश्यकता होती है।- इंडेक्स को प्रभावी रखने के लिए, कॉलम को फ़ंक्शन में न लपेटें।
NOW()-आधारित औरCURDATE()-आधारित लॉजिक के बीच स्पष्ट रूप से चुनें।
6. DEFAULT CURRENT_TIMESTAMP और ON UPDATE (टेबल डिज़ाइन मूल बातें)
डेटाबेस डिज़ाइन में, स्वचालित रूप से created_at और updated_at को प्रबंधित करना सामान्य है।
MySQL में, CURRENT_TIMESTAMP आपको सम्मिलन और अद्यतन पर वर्तमान समय स्वचालित रूप से सेट करने देता है।
6.1 created_at को स्वचालित सेट करें (DEFAULT CURRENT_TIMESTAMP)
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
व्यवहार:
INSERT INTO users (name) VALUES ('Alice');
→ वर्तमान समय स्वचालित रूप से created_at में डाला जाता है।
मुख्य बिंदु
CURRENT_TIMESTAMPको DEFAULT में उपयोग किया जा सकता है।NOW()को सीधे DEFAULT में उपयोग नहीं किया जा सकता।
सामान्य गलती
created_at DATETIME DEFAULT NOW(); -- error
कारण:
- MySQL में, आप सामान्यतः फ़ंक्शन को DEFAULT के रूप में सेट नहीं कर सकते (अपवाद CURRENT_TIMESTAMP है)।
6.2 updated_at को स्वचालित अद्यतन (ON UPDATE)
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
);
व्यवहार:
UPDATE users SET name = 'Bob' WHERE id = 1;
→ updated_at स्वचालित रूप से वर्तमान समय में अद्यतन हो जाता है।
उपयोग के मामले
- अंतिम लॉगिन ट्रैकिंग
- अद्यतन इतिहास
- ऑडिट लॉग
6.3 DATETIME बनाम TIMESTAMP (महत्वपूर्ण)
| Type | Range | Time zone impact |
|---|---|---|
| DATETIME | Year 1000 to 9999 | No |
| TIMESTAMP | 1970 to 2038 | Yes |
मुख्य अंतर
TIMESTAMPआंतरिक रूप से UTC में संग्रहीत होता है और प्रदर्शन पर सत्र समय क्षेत्र में परिवर्तित किया जाता है।DATETIMEवास्तविक मान संग्रहीत करता है (कोई रूपांतरण नहीं)।
मार्गदर्शन
| Case | Recommended type |
|---|---|
| Log management | TIMESTAMP |
| Future dates (after 2038) | DATETIME |
| Fixed values not requiring TZ conversion | DATETIME |
6.4 CURRENT_TIMESTAMP को DATETIME के साथ भी उपयोग किया जा सकता है
MySQL 5.6 और बाद में, आप DATETIME कॉलम के लिए भी DEFAULT और ON UPDATE के रूप में CURRENT_TIMESTAMP निर्दिष्ट कर सकते हैं।
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
नोट्स
- पुराने MySQL संस्करणों में प्रतिबंध होते हैं (पर्यावरण-निर्भर)।
- यदि आपको सटीकता चाहिए:
DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6)
6.5 यदि आप NOW() का उपयोग करना चाहते हैं: एक वैकल्पिक (ट्रिगर)
CREATE TRIGGER set_created_at
BEFORE INSERT ON logs
FOR EACH ROW
SET NEW.created_at = NOW();
उपयोग के मामले
- जटिल प्रारंभिक मान तर्क
- शर्तीय टाइमस्टैम्प असाइनमेंट
नोट्स
- ट्रिगर को डिबग करना कठिन होता है।
- जब तक आवश्यक न हो, इन्हें टालें।
सामान्य डिज़ाइन त्रुटियाँ
- दोनों
created_atऔरupdated_atमें ON UPDATE जोड़ना - DATETIME और TIMESTAMP के व्यवहार को भ्रमित करना
- टाइम ज़ोन निर्णयों को टालना
इस अनुभाग के मुख्य बिंदु
- डिफ़ॉल्ट के लिए
CURRENT_TIMESTAMPका उपयोग करें। - अपडेट ट्रैकिंग के लिए
ON UPDATE CURRENT_TIMESTAMPका उपयोग करें। - टाइम ज़ोन व्यवहार और 2038 समस्या के आधार पर प्रकार चुनें।
- यदि आपको सटीकता चाहिए, तो
(6)को न भूलें।
7. टाइम ज़ोन डिज़ाइन (store in UTC, display in local time)
जब वर्तमान समय से निपटते हैं, खराब टाइम ज़ोन डिज़ाइन समय में ड्रिफ्ट और दोहरी रूपांतरण का कारण बनता है।
व्यावहारिक रूप से, सबसे सुरक्षित डिफ़ॉल्ट “UTC में संग्रहित करें, प्रदर्शित करने के लिए स्थानीय समय में बदलें” है।

चित्र: MySQL में UTC संग्रहित करने और स्थानीय समय प्रदर्शित करने की बुनियादी आर्किटेक्चर
7.1 वर्तमान टाइम ज़ोन जांचें
सबसे पहले, जांचें कि MySQL किस टाइम ज़ोन में चल रहा है।
SELECT @@global.time_zone, @@session.time_zone;
@@global.time_zone→ सर्वर-व्यापी सेटिंग@@session.time_zone→ वर्तमान कनेक्शन/सेशन सेटिंग- यदि यह
SYSTEMदिखाता है, तो यह OS सेटिंग पर निर्भर करता है
सामान्य समस्याएँ
- प्रोडक्शन और डेवलपमेंट सर्वर के OS टाइम ज़ोन अलग हैं
- एप्लिकेशन UTC में बदलता है, और DB फिर से बदलता है (दोहरी रूपांतरण)
7.2 सत्र के अनुसार टाइम ज़ोन बदलें
SET time_zone = 'Asia/Tokyo';
या UTC में एकीकृत करें:
SET time_zone = '+00:00';
महत्वपूर्ण बिंदु
- कनेक्शन बंद होने पर यह वापस मूल स्थिति में आ जाता है
- यदि आप कनेक्शन पूलिंग का उपयोग करते हैं, तो अपने एप्लिकेशन सेटिंग्स जांचें
7.3 क्यों UTC में संग्रहित करें (वास्तविक दुनिया का सिद्धांत)
सिफ़ारिशित नीति
- डेटा को UTC में संग्रहित करें
- प्रदर्शित करते समय उपयोगकर्ता के टाइम ज़ोन में बदलें
कारण:
- अंतर्राष्ट्रीय समर्थन आसान
- डेलाइट सेविंग टाइम (DST) समस्याओं से बचें
- सर्वर बदलते समय प्रभाव को न्यूनतम रखें
UTC प्राप्त करें:
SELECT UTC_TIMESTAMP();
7.4 CONVERT_TZ() के साथ टाइम ज़ोन बदलें
उदाहरण: UTC → JST
SELECT CONVERT_TZ('2025-02-23 05:35:00', '+00:00', '+09:00');
टाइम ज़ोन नामों का उपयोग करके:
SELECT CONVERT_TZ('2025-02-23 05:35:00', 'UTC', 'Asia/Tokyo');
वास्तविक दुनिया का उदाहरण
SELECT CONVERT_TZ(created_at, 'UTC', 'Asia/Tokyo')
FROM users;
7.5 CONVERT_TZ() NULL क्यों लौटाता है
यदि यह NULL लौटाता है, तो सामान्य कारण हैं:
- MySQL टाइम ज़ोन टेबल लोड नहीं हैं
- निर्दिष्ट टाइम ज़ोन नाम मौजूद नहीं है
लिनक्स पर लोड करने का उदाहरण:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
नोट्स
- प्रोडक्शन में, अनुमतियों की पुष्टि करें और क्या रीस्टार्ट आवश्यक है
- Docker में, इमेज पर निर्भर करते हुए zoneinfo शामिल नहीं हो सकता
7.6 सर्वर-व्यापी टाइम ज़ोन बदलें
कॉन्फ़िग फ़ाइल (my.cnf / my.ini):
[mysqld]
default_time_zone = '+00:00'
रीस्टार्ट के बाद सत्यापित करें:
SELECT @@global.time_zone;
महत्वपूर्ण
- प्रोडक्शन बदलावों के लिए, प्रभाव के दायरे की पुष्टि करें
- मौजूदा डेटा के साथ सावधान रहें (कभी-कभी केवल प्रदर्शित परिवर्तन होते हैं)
सामान्य गलतियाँ
- स्थानीय समय को UTC के बजाय संग्रहित करना, फिर बाद में अंतर्राष्ट्रीय समर्थन जोड़ना
- एप और DB के बीच दोहरी रूपांतरण
- टाइम ज़ोन को ध्यान में रखे बिना DATETIME के साथ डिज़ाइन करना
- टेस्ट और प्रोडक्शन के बीच अलग TZ सेटिंग्स
इस अनुभाग के मुख्य बिंदु
- UTC में संग्रहित करें और प्रदर्शित करने पर बदलें।
UTC_TIMESTAMP()का उपयोग करें।CONVERT_TZ()का उपयोग करते समय, TZ टेबल की जाँच करें।- हमेशा टाइम ज़ोन में पर्यावरण अंतर को ध्यान में रखें।
8. व्यावहारिक उदाहरण जिन्हें आप जैसा है वैसा उपयोग कर सकते हैं
यहाँ ठोस SQL उदाहरण हैं जो दिखाते हैं कैसे MySQL वर्तमान समय को वास्तविक विकास/ऑपरेशन्स में उपयोग करें।
इन्हें इस तरह लिखा गया है कि आप सीधे कॉपी और पेस्ट कर सकें।
8.1 लॉग में वर्तमान समय को स्वचालित रूप से डालें
तालिका बनाएं
CREATE TABLE system_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
level VARCHAR(50),
message TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
लॉग डालें
INSERT INTO system_logs (level, message)
VALUES ('ERROR', 'Failed to connect to the DB');
मुख्य बिंदु
created_atस्वचालित रूप से डाला जाता है- ऐप से टाइमस्टैम्प पास करने की आवश्यकता नहीं
- ऑडिटिंग और घटना जांच के लिए आवश्यक डिज़ाइन
सामान्य गलतियाँ
- ऐप और DB दोनों में समय प्रबंधन
- असंगत समय क्षेत्रों के कारण समय असंगतियां
8.2 अंतिम लॉगिन समय अपडेट करें
तालिका डिज़ाइन
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255),
last_login TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
);
लॉगिन पर अपडेट
UPDATE users
SET last_login = NOW()
WHERE id = 1;
नोट्स
ON UPDATEकेवल तब चलता है जब कॉलम बदलता है- कुछ UPDATE कथन मान नहीं बदल सकते और इसलिए अपडेट नहीं होते
8.3 बैच जॉब्स में एक संदर्भ समय को फिक्स करें
लंबे समय तक चलने वाली प्रक्रियाओं के लिए, एक संदर्भ समय को फिक्स करना सुरक्षित रहता है।
SET @base_time = NOW();
SELECT *
FROM orders
WHERE created_at >= @base_time - INTERVAL 1 DAY;
क्यों
- प्रक्रिया के मध्य में समय नहीं बदलता
- स्थिरता बनी रहती है
8.4 आज / कल / पिछले 7 दिनों के लिए एग्रीगेशन
आज की बिक्री
SELECT SUM(amount)
FROM orders
WHERE created_at >= CURDATE()
AND created_at < CURDATE() + INTERVAL 1 DAY;
कल की बिक्री
SELECT SUM(amount)
FROM orders
WHERE created_at >= CURDATE() - INTERVAL 1 DAY
AND created_at < CURDATE();
पिछले 7 दिन
SELECT COUNT(*)
FROM users
WHERE created_at >= NOW() - INTERVAL 7 DAY;
महत्वपूर्ण
- WHERE क्लॉज़ में कॉलम पर फ़ंक्शन लागू न करें
- ऐसी शर्तें लिखें जो इंडेक्स को उपयोगी रखें
8.5 समाप्ति जांच (सेशन/टोकन)
SELECT *
FROM sessions
WHERE expires_at > NOW();
समाप्त हुए पंक्तियों को हटाएँ
DELETE FROM sessions
WHERE expires_at <= NOW();
सामान्य गलतियाँ
CURDATE()का उपयोग करके समय को अनदेखा करना- UTC संग्रहीत करना लेकिन स्थानीय
NOW()से तुलना करना
8.6 N घंटे के भीतर समाप्त होने वाली पंक्तियों को प्राप्त करें
SELECT *
FROM coupons
WHERE expires_at <= NOW() + INTERVAL 1 HOUR;
उपयोग केस:
- समाप्ति अलर्ट
- समाप्ति सूचनाएँ
आपको हमेशा याद रखना चाहिए
- स्पष्ट रहें कि आपका बेसलाइन “अब” है या “आज 00:00”
- ऐसी प्रेडिकेट लिखें जो इंडेक्स को प्रभावी रखें
- समय क्षेत्र डिज़ाइन पहले से तय करें
- स्पष्ट नीति के बिना
NOW()औरUTC_TIMESTAMP()को मिलाएँ नहीं
इस अनुभाग से मुख्य निष्कर्ष
- लॉग/ऑडिट/अपडेट ट्रैकिंग के लिए,
CURRENT_TIMESTAMPका उपयोग करें - एग्रीगेशन के लिए, सुरक्षित
>= AND <पैटर्न का उपयोग करें - सेशन प्रबंधन के लिए,
NOW()से तुलना करें - प्रोसेसिंग को स्थिर रखने के लिए बेसलाइन समय फिक्स करें
9. अक्सर पूछे जाने वाले प्रश्न (FAQ)
यहाँ MySQL वर्तमान समय के बारे में सामान्य प्रश्न हैं, विशेष रूप से वे समस्याएँ जो वास्तविक कार्य में आती हैं।
9.1 NOW() और CURRENT_TIMESTAMP में क्या अंतर है?
निष्कर्ष: लौटाए गए मान का अर्थ समान है।
SELECT NOW(), CURRENT_TIMESTAMP;
दोनों वर्तमान दिनांक‑समय लौटाते हैं।
मुख्य अंतर सिंटैक्स उपयोग में है
CURRENT_TIMESTAMPकोDEFAULTऔरON UPDATEमें उपयोग किया जा सकता हैNOW()को सीधेDEFAULTमें उपयोग नहीं किया जा सकता
नोट्स
- यह प्रकार का अंतर नहीं है
- आप
(6)जैसे तर्कों के साथ परिशुद्धता निर्दिष्ट कर सकते हैं
9.2 क्या आपको SYSDATE() का उपयोग करना चाहिए?
SYSDATE() “मूल्यांकन समय” पर समय लौटाता है।
SELECT SYSDATE(), SLEEP(2), SYSDATE();
एक ही क्वेरी के भीतर भी मान बदल सकता है।
कब उपयोग करें
- जब आपको सटीक वास्तविक समय क्षण रिकॉर्ड करना हो
कब बचें
- प्रतिकृति
- लेन‑देन प्रक्रिया जहाँ स्थिरता महत्वपूर्ण है
अधिकांश मामलों में, NOW() का उपयोग पर्याप्त है।
9.3 समय क्यों शिफ्ट हो रहा है?
Main causes:
- Server time zone settings
→ सर्वर टाइम ज़ोन सेटिंग्स - Session time zone settings
→ सेशन टाइम ज़ोन सेटिंग्स - Double conversion with the application
→ एप्लिकेशन के साथ दोहरी रूपांतरण - Automatic conversion behavior of the TIMESTAMP type
→ TIMESTAMP प्रकार के स्वचालित रूपांतरण व्यवहार
Check with:
SELECT @@global.time_zone, @@session.time_zone;
Mitigation
निवारण
- Store in UTC by default
→ डिफ़ॉल्ट रूप से UTC में संग्रहीत करें - Convert only when displaying
→ केवल प्रदर्शित करते समय रूपांतरण करें - Unify the policy between app and DB
→ एप और DB के बीच नीति को एकीकृत करें
9.4 CONVERT_TZ() returns NULL
9.4 CONVERT_TZ() NULL लौटाता है
Causes:
कारण:
- Time zone tables are not loaded
→ टाइम ज़ोन तालिकाएँ लोड नहीं हुई हैं - Incorrect time zone name
→ गलत टाइम ज़ोन नाम
Fix:
समाधान:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Be especially careful in Docker environments.
Docker परिवेश में विशेष सावधानी बरतें।
9.5 Range shifts with BETWEEN
9.5 BETWEEN के साथ रेंज शिफ्ट
Bad:
गलत:
WHERE created_at BETWEEN '2025-02-01' AND '2025-02-10';
Safe:
सुरक्षित:
WHERE created_at >= '2025-02-01 00:00:00'
AND created_at < '2025-02-11 00:00:00';
Reasons:
कारण:
- End boundary time issue
→ अंत सीमा समय समस्या - Microseconds leakage
→ माइक्रोसेकंड लीक - Index efficiency
→ इंडेक्स दक्षता
9.6 How do you choose between DATETIME and TIMESTAMP?
9.6 DATETIME और TIMESTAMP में से कैसे चुनें?
- International support / UTC management → TIMESTAMP
→ अंतर्राष्ट्रीय समर्थन / UTC प्रबंधन → TIMESTAMP - After 2038 or fixed datetimes → DATETIME
→ 2038 के बाद या स्थिर डेटटाइम → DATETIME
Decide this during design.
डिज़ाइन के दौरान इसे तय करें।
9.7 Microseconds aren’t being stored
9.7 माइक्रोसेकंड संग्रहीत नहीं हो रहे हैं
Cause:
कारण:
- No precision specified in the column definition
→ कॉलम परिभाषा में कोई सटीकता निर्दिष्ट नहीं है
Fix:
समाधान:
created_at DATETIME(6)
Key takeaways from this section
इस अनुभाग से मुख्य निष्कर्ष
- Start with
NOW()andCURRENT_TIMESTAMP
→NOW()औरCURRENT_TIMESTAMPसे शुरू करें - For range queries, use
>= AND <
→ रेंज क्वेरी के लिए,>= AND <का उपयोग करें - UTC storage is the safest default
→ UTC संग्रहण सबसे सुरक्षित डिफ़ॉल्ट है - Don’t forget type selection and precision
→ प्रकार चयन और सटीकता को न भूलें
10. Summary
10. सारांश
This article organized practical ways to retrieve, format, calculate, and manage the current time in MySQL.
Finally, here are the minimum essentials you should know to stay safe.
यह लेख MySQL में वर्तमान समय को प्राप्त करने, स्वरूपित करने, गणना करने और प्रबंधित करने के व्यावहारिक तरीकों को व्यवस्थित करता है।
अंत में, यहाँ सुरक्षित रहने के लिए आपको जानने वाले न्यूनतम आवश्यक बिंदु हैं।
10.1 Getting the current time (basics)
10.1 वर्तमान समय प्राप्त करना (बुनियादी)
- General retrieval →
NOW()
→ सामान्य प्राप्ति →NOW() - Table DEFAULT / update tracking →
CURRENT_TIMESTAMP
→ तालिका DEFAULT / अपडेट ट्रैकिंग →CURRENT_TIMESTAMP - Date only →
CURDATE()
→ केवल तिथि →CURDATE() - Time only →
CURTIME()
→ केवल समय →CURTIME() - UTC →
UTC_TIMESTAMP()
→ UTC →UTC_TIMESTAMP() - High precision →
NOW(6)
→ उच्च सटीकता →NOW(6)
Rules of thumb
सामान्य नियम
- If unsure, using
NOW()is fine in most cases.
→ यदि अनिश्चित हों, तो अधिकांश मामलों मेंNOW()का उपयोग ठीक है। - For schema design, use
CURRENT_TIMESTAMP.
→ स्कीमा डिज़ाइन के लिए,CURRENT_TIMESTAMPका उपयोग करें।
10.2 Range queries: “>= AND <” is the golden rule
10.2 रेंज क्वेरी: “>= AND <” स्वर्ण नियम है
Safe pattern:
सुरक्षित पैटर्न:
WHERE created_at >= 'START'
AND created_at < 'END'
Why:
क्यों:
- Prevents missing end-boundary rows
→ अंत सीमा पंक्तियों के गायब होने से बचाता है - Works with microseconds
→ माइक्रोसेकंड के साथ काम करता है - Keeps indexes usable
→ इंडेक्स को उपयोगी रखता है
Bad example
गलत उदाहरण
WHERE DATE(created_at) = CURDATE();
Don’t wrap the column in a function.
कॉलम को फ़ंक्शन में न लपेटें।
10.3 Datetime arithmetic basics
10.3 डेटटाइम अंकगणित मूल बातें
- Add/subtract →
INTERVAL
→ जोड़/घटाव →INTERVAL - Day differences →
DATEDIFF()
→ दिन अंतर →DATEDIFF() - Time differences →
TIMESTAMPDIFF()
→ समय अंतर →TIMESTAMPDIFF()
Always keep in mind whether your baseline is “now” or “today 00:00.”
हमेशा ध्यान रखें कि आपका बेसलाइन “now” है या “today 00:00।”
10.4 Time zone design principles
10.4 टाइम ज़ोन डिज़ाइन सिद्धांत
- Store in UTC
→ UTC में संग्रहीत करें - Convert on display
→ प्रदर्शित करने पर रूपांतरण करें - Unify policy between app and DB
→ एप और DB के बीच नीति को एकीकृत करें
Check with:
जाँचें:
SELECT @@global.time_zone, @@session.time_zone;
10.5 Table design best practices
10.5 तालिका डिज़ाइन सर्वोत्तम प्रथाएँ
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
- Standard equipment for auditing/logging/update tracking
→ ऑडिटिंग/लॉगिंग/अपडेट ट्रैकिंग के लिए मानक उपकरण - If you need precision, specify
(6)
→ यदि आपको सटीकता चाहिए, तो(6)निर्दिष्ट करें
The 4 most important real-world points
4 सबसे महत्वपूर्ण वास्तविक-विश्व बिंदु
- Don’t misunderstand the difference between
NOW()andCURRENT_TIMESTAMP
→NOW()औरCURRENT_TIMESTAMPके बीच अंतर को न समझें - For range queries, use
>= AND <
→ रेंज क्वेरी के लिए,>= AND <का उपयोग करें - Store in UTC by default
→ डिफ़ॉल्ट रूप से UTC में संग्रहीत करें - Decide types (DATETIME vs TIMESTAMP) during design
→ डिज़ाइन के दौरान प्रकार तय करें (DATETIME बनाम TIMESTAMP)
MySQL current time handling is foundational for logging, sales aggregation, auth/session management, batch jobs, and more.
MySQL वर्तमान समय प्रबंधन लॉगिंग, बिक्री संकलन, प्रमाणीकरण/सेशन प्रबंधन, बैच जॉब्स और अधिक के लिए बुनियादी है।
If you follow the principles in this article, you can avoid many common problems such as time drift, boundary bugs, and performance degradation.
यदि आप इस लेख के सिद्धांतों का पालन करते हैं, तो आप समय ड्रिफ्ट, सीमा बग और प्रदर्शन गिरावट जैसे कई सामान्य समस्याओं से बच सकते हैं।


