खोज…


अभी()

Select Now();

वर्तमान सर्वर दिनांक और समय दिखाता है।

Update `footable` set mydatefield = Now();

यह सर्वर के कॉन्फ़िगर किए गए mydatefield में वर्तमान सर्वर तिथि और समय के साथ फ़ील्ड mydatefield को अपडेट करेगा, उदा

'2016-07-21 12:00:00'

तिथि अंकगणित

NOW() + INTERVAL 1 DAY  -- This time tomorrow

CURDATE() - INTERVAL 4 DAY -- Midnight 4 mornings ago

संग्रहीत mysql प्रश्न दिखाएँ जो 3 से 10 घंटे पहले (180 से 600 मिनट पहले) पूछे गए थे:

SELECT qId,askDate,minuteDiff  
FROM 
(   SELECT qId,askDate,
    TIMESTAMPDIFF(MINUTE,askDate,now()) as minuteDiff 
    FROM questions_mysql 
) xDerived 
WHERE minuteDiff BETWEEN 180 AND 600 
ORDER BY qId DESC 
LIMIT 50;

+----------+---------------------+------------+
| qId      | askDate             | minuteDiff |
+----------+---------------------+------------+
| 38546828 | 2016-07-23 22:06:50 |        182 |
| 38546733 | 2016-07-23 21:53:26 |        195 |
| 38546707 | 2016-07-23 21:48:46 |        200 |
| 38546687 | 2016-07-23 21:45:26 |        203 |
| ...      |                     |            |
+----------+---------------------+------------+

MySQL मैनुअल पेज TIMESTAMPDIFF()

खबरदार MySQL में अंकगणित CURDATE() + 1 तारीख अंकगणित जैसे भावों का उपयोग करने की कोशिश न करें। यदि आप ओरेकल डाटाबेस उत्पाद के आदी हैं, तो वे आपकी उम्मीद के मुताबिक नहीं लौटते हैं। इसके बजाय CURDATE() + INTERVAL 1 DAY उपयोग करें।

एक तिथि सीमा के विरुद्ध परीक्षण

हालाँकि, BETWEEN रेंज ... AND ... का उपयोग करने के लिए बहुत लुभावना है, लेकिन यह समस्याग्रस्त है। इसके बजाय, यह पैटर्न अधिकांश समस्याओं से बचता है:

WHERE x >= '2016-02-25'
  AND x  < '2016-02-25' + INTERVAL 5 DAY

लाभ:

  • BETWEEN 'समावेशी' है जिसमें अंतिम तिथि या दूसरा भी शामिल है।
  • यदि आप DATETIME पर माइक्रोसेकंड रिज़ॉल्यूशन रखते हैं तो 23:59:59 अनाड़ी और गलत है।
  • यह पैटर्न लीप वर्ष और अन्य डेटा गणना से निपटने से बचता है।
  • यह काम करता है कि क्या x DATE , DATETIME या TIMESTAMP

SYSDATE (), अब (), CURDATE ()

  SELECT SYSDATE();

यह फ़ंक्शन वर्तमान दिनांक और समय को 'YYYY-MM-DD HH:MM:SS' या YYYYMMDDHHMMSS प्रारूप में मान के रूप में लौटाता है, जो इस बात पर निर्भर करता है कि फ़ंक्शन का उपयोग स्ट्रिंग या संख्यात्मक संदर्भ में किया गया है। यह वर्तमान समय क्षेत्र में दिनांक और समय देता है।

  SELECT NOW();

यह फ़ंक्शन SYSDATE() लिए एक पर्याय है।

  SELECT CURDATE();

यह फ़ंक्शन 'YYYY-MM-DD' या YYYYMMDD प्रारूप में एक मान के रूप में, बिना किसी फ़ंक्शन के वर्तमान दिनांक को लौटाता है, जो इस बात पर निर्भर करता है कि फ़ंक्शन का उपयोग स्ट्रिंग या संख्यात्मक संदर्भ में किया गया है। यह वर्तमान समय क्षेत्र में दिनांक लौटाता है।

दिए गए दिनांक या दिनांक समय अभिव्यक्ति से दिनांक निकालें

SELECT DATE('2003-12-31 01:02:03');

उत्पादन होगा:

2003-12-31

किसी दिनांक और समय की खोज के लिए एक सूचकांक का उपयोग करना

कई वास्तविक दुनिया डेटाबेस तालिकाओं में DATETIME या TIMESTAMP स्तंभ मानों के साथ कई पंक्तियाँ होती हैं, जिनमें बहुत समय होता है, जिसमें वर्षों या कई दशक भी शामिल हैं। अक्सर उस समय के कुछ सबसेट को पुनः प्राप्त करने के लिए WHERE क्लॉज का उपयोग करना आवश्यक होता है। उदाहरण के लिए, हम तालिका से दिनांक 1-सितंबर -2016 के लिए पंक्तियों को पुनः प्राप्त करना चाह सकते हैं।

ऐसा करने का एक अक्षम तरीका है:

 WHERE DATE(x) = '2016-09-01'   /* slow! */

यह अक्षम है क्योंकि यह एक फ़ंक्शन - DATE() - एक कॉलम के मानों पर लागू होता है। इसका मतलब है कि MySQL को x प्रत्येक मान की जांच करनी चाहिए, और एक इंडेक्स का उपयोग नहीं किया जा सकता है।

ऑपरेशन करने का एक बेहतर तरीका यह है

 WHERE x >= '2016-09-01'
   AND x <  '2016-09-01' + INTERVAL 1 DAY

यह सवाल में दिन पर कहीं भी x के मूल्यों की एक श्रृंखला का चयन करता है, जब तक कि अगले दिन मध्यरात्रि तक (इसलिए < ) शामिल नहीं होता है।

यदि तालिका में x कॉलम पर एक इंडेक्स है, तो डेटाबेस सर्वर इंडेक्स पर एक रेंज स्कैन कर सकता है। इसका मतलब है कि यह एक्स के पहले प्रासंगिक मूल्य को जल्दी से पा सकता है, और तब तक अनुक्रमिक रूप से स्कैन कर सकता है जब तक कि यह अंतिम प्रासंगिक मूल्य नहीं पाता है। एक इंडेक्स रेंज स्कैन DATE(x) = '2016-09-01 द्वारा आवश्यक पूर्ण टेबल स्कैन की तुलना में बहुत अधिक कुशल है।

इसका उपयोग करने के लिए परीक्षा न करें, भले ही यह अधिक कुशल लगे।

  WHERE x BETWEEN '2016-09-01' AND '2016-09-01' + INTERVAL 1 DAY  /*  wrong! */

इसमें रेंज स्कैन की तरह ही दक्षता है, लेकिन यह 2-सेप्ट -2016 की आधी रात को x मूल्यों के साथ पंक्तियों का चयन करेगा, जो कि आप नहीं चाहते हैं।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow