MySQL कल की तारीख का चयन


101

मैं उन मूल्यों को कैसे प्रदर्शित और गिन सकता हूं जिनकी तारीखें कल हैं? मैं time()डेटाबेस में दिनांक सम्मिलित करता था। उदाहरण:

URL: google.com youtube.com google.com youtube.com test.com youtube.com
DateVisited: 1313668492 1313668540 1313668571 13154314

मैं यह प्रदर्शित करना चाहता हूं कि तालिका में कितने URL मौजूद हैं और कल कितने URL देखे गए हैं। उदाहरण परिणाम:

LINK       | timesExisted | timesVisitedYesterday
Google.com |       2      | 2
youtube.com|       3      | 3

मेरे पास पहले से ही कल की तारीख प्राप्त करने का विचार है, लेकिन मेरे पास यह गणना करने का कोई विचार नहीं है कि कल के लिए कितनी बार एक URL मौजूद है और एक तालिका में कितनी बार URL का अस्तित्व है।

जवाबों:


166

कल की तारीख पाने का सबसे सरल और अच्छा तरीका है:

subdate(current_date, 1)

आपकी क्वेरी होगी:

SELECT 
    url as LINK,
    count(*) as timesExisted,
    sum(DateVisited between UNIX_TIMESTAMP(subdate(current_date, 1)) and
        UNIX_TIMESTAMP(current_date)) as timesVisitedYesterday
FROM mytable
GROUP BY 1

जिज्ञासु के लिए, वह कारण जो sum(condition)आपको उन पंक्तियों की गिनती देता है जो स्थिति को संतुष्ट करते हैं, जिन्हें अन्यथा एक बोझिल और चिंताजनक caseकथन की आवश्यकता होती है , यह है कि mysql में बूलियन मूल्य 1सही और 0गलत के लिए होते हैं , इसलिए किसी शर्त को प्रभावी ढंग से संक्षेप में बताएं कि कितनी बार यह सच है। इस पैटर्न का उपयोग करने से आपका SQL कोड साफ हो सकता है।


89
SELECT SUBDATE(NOW(),1);

जहां अब () फ़ंक्शन टाइमस्टैम्प में सिस्टम की वर्तमान तिथि और समय को पुनः प्राप्त करता है ...

आप उपयोग कर सकते हैं:

SELECT SUBDATE(CURDATE(),1)

3
मेरे लिए काम किया। बहुत धन्यवाद
mable george

20

आप उपयोग कर सकते हैं:

SELECT SUBDATE(NOW(), 1);

या

SELECT SUBDATE(NOW(), INTERVAL 1 DAY);

या

SELECT NOW() - INTERVAL 1 DAY;

या

SELECT DATE_SUB(NOW(), INTERVAL 1 DAY);

11

आप अभिव्यक्ति का उपयोग करके कल की तारीख प्राप्त कर सकते हैं CAST(NOW() - INTERVAL 1 DAY AS DATE)। तो कुछ इस तरह काम कर सकते हैं:

SELECT * FROM your_table

WHERE DateVisited >= UNIX_TIMESTAMP(CAST(NOW() - INTERVAL 1 DAY AS DATE))
  AND DateVisited <= UNIX_TIMESTAMP(CAST(NOW() AS DATE));

9

अंतिम सप्ताह के लिए प्रश्न:

SELECT *
FROM dual
WHERE search_date BETWEEN SUBDATE(CURDATE(), 7) AND CURDATE()

9

अंतिम या अगली तिथि, सप्ताह, महीना और वर्ष की गणना। यह किसी के लिए भी मददगार हो सकता है।

आज की तारीख:

select curdate();

बिता कल:

select subdate(curdate(), 1)

आने वाला कल:

select adddate(curdate(), 1)

पिछले 1 सप्ताह:

select between subdate(curdate(), 7) and subdate(curdate(), 1)

अगले 1 सप्ताह:

between adddate(curdate(), 7) and adddate(curdate(), 1)

पिछले 1 महीने:

between subdate(curdate(), 30) and subdate(curdate(), 1)

अगले 1 महीने:

between adddate(curdate(), 30) and adddate(curdate(), 1)

वर्तमान माह:

subdate(curdate(),day(curdate())-1) and last_day(curdate());

पिछले 1 साल:

between subdate(curdate(), 365) and subdate(curdate(), 1)

अगले 1 साल:

between adddate(curdate(), 365) and adddate(curdate(), 1)

7

हालांकि चुना गया उत्तर सही और अधिक संक्षिप्त है, मैं अन्य उत्तरों में बताई गई संरचना के लिए तर्क करूंगा:

SELECT * FROM your_table
WHERE UNIX_TIMESTAMP(DateVisited) >= UNIX_TIMESTAMP(CAST(NOW() - INTERVAL 1 DAY AS DATE))
  AND UNIX_TIMESTAMP(DateVisited) <= UNIX_TIMESTAMP(CAST(NOW() AS DATE));

यदि आपको टाइमस्टैम्प के बिना बस एक नंगे तारीख की आवश्यकता है, तो आप इसे निम्नलिखित के रूप में भी लिख सकते हैं:

SELECT * FROM your_table
WHERE DateVisited >= CAST(NOW() - INTERVAL 1 DAY AS DATE)
  AND DateVisited <= CAST(NOW() AS DATE);

CASTबनाम SUBDATEका उपयोग करने का कारण CASTएएनएसआई एसक्यूएल सिंटैक्स है। SUBDATEतारीख के अंकगणितीय घटक का एक MySQL विशिष्ट कार्यान्वयन है CAST। एएनएसआई सिंटैक्स का उपयोग करने की आदत में कमी से सिरदर्द कम हो सकता है क्या आपको कभी भी एक अलग डेटाबेस में स्थानांतरित करना चाहिए। यह एक पेशेवर अभ्यास के रूप में आदत में रहने के लिए अच्छा है क्योंकि आप भविष्य में अन्य DBMS के साथ लगभग निश्चित रूप से काम करेंगे।

कोई भी प्रमुख डीबीएमएस सिस्टम पूरी तरह से एएनएसआई अनुरूप नहीं है, लेकिन उनमें से ज्यादातर एएनएसआई सिंटैक्स के व्यापक सेट को लागू करते हैं, जबकि लगभग उनमें से कोई भी MySQL और उसके वंशज (MariaDB, Percona, आदि) MySQL- विशिष्ट सिंटैक्स को लागू नहीं करेगा।


क्यों एक दूसरे के ऊपर एक का चयन करेंगे के रूप में अच्छी व्याख्या।
Sablefoste

4

मैंने cdhowie के उपरोक्त उत्तरों में से एक को अनुकूलित किया क्योंकि मुझे यह काम करने के लिए नहीं मिला। यह मेरे लिए काम करने लगता है। मुझे संदेह है कि UNIX_TIMESTAMP फ़ंक्शन का उपयोग करने के साथ ऐसा करना भी संभव है।

SELECT * FROM your_table

WHERE UNIX_TIMESTAMP(DateVisited) >= UNIX_TIMESTAMP(CAST(NOW() - INTERVAL 1 DAY AS DATE))
  AND UNIX_TIMESTAMP(DateVisited) <= UNIX_TIMESTAMP(CAST(NOW() AS DATE));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.