यदि आप केवल तिथि के अनुसार चयन कर रहे हैं, तो अपनी गणनाओं को CURDATE
. पर आधारित करें (जो केवल तारीख लौटाता है) के बजाय NOW
(जो दिनांक और समय लौटाता है)। ये उदाहरण दिन की सीमाओं में हर समय दिखाई देंगे:
- आज:
WHERE timestamp >= CURDATE()
- कल:
WHERE timestamp >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND timestamp < CURDATE()
- इस महीने:
WHERE timestamp >= DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE())-1 DAY)
- दो तिथियों के बीच 3 जून 2013 और 7 जून 2013 (ध्यान दें कि समाप्ति तिथि को 8 जून के रूप में कैसे निर्दिष्ट किया गया है, न कि 7 जून):
WHERE timestamp >= '2013-06-03' AND timestamp < '2013-06-08'
"यह सप्ताह" इस बात पर निर्भर करता है कि आप अपना सप्ताह किस दिन शुरू करते हैं; मैं इसे आप पर छोड़ दूँगा। आप DAYOFWEEK
CURDATE()
में बदलाव करने के लिए फ़ंक्शन उचित श्रेणियों के लिए।
परिशिष्ट :OP का कॉलम प्रकार INTEGER
था , एक यूनिक्स टाइमस्टैम्प संग्रहीत करना, और मेरा उत्तर मान लिया गया कि कॉलम प्रकार TIMESTAMP
. था . यहां बताया गया है कि यूनिक्स टाइमस्टैम्प मान के साथ सभी समान चीजें कैसे करें और कॉलम अनुक्रमित होने पर अभी भी ऑप्टिमाइज़ेशन बनाए रखें (जैसा कि ऊपर दिए गए उत्तर TIMESTAMP
करेंगे तो क्या करेंगे) कॉलम अनुक्रमित है)...
मूल रूप से, समाधान केवल शुरुआत और/या समाप्ति तिथियों को UNIX_TIMESTAMP
समारोह:
- आज:
WHERE timestamp >= UNIX_TIMESTAMP(CURDATE())
- कल:
WHERE timestamp >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AND timestamp < UNIX_TIMESTAMP(CURDATE())
- इस महीने:
WHERE timestamp >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE())-1 DAY))
- दो तिथियों के बीच 3 जून 2013 और 7 जून 2013 (ध्यान दें कि समाप्ति तिथि 8 जून के रूप में कैसे निर्दिष्ट की गई है, न कि 7 जून):
WHERE timestamp >= UNIX_TIMESTAMP('2013-06-03') AND timestamp < UNIX_TIMESTAMP('2013-06-08')