MySQL आज के बराबर तारीख का चयन करें


96

मैं एक mysql सेलेक्ट स्टेटमेंट चलाने की कोशिश कर रहा हूँ जहाँ यह आज की तारीख को देखता है और केवल उस मौजूदा दिन में साइन किए गए परिणाम देता है। मैंने वर्तमान में निम्नलिखित की कोशिश की है, लेकिन यह काम नहीं करता है।

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
    FROM users 
    WHERE users.signup_date = CURDATE()

मैंने SELECTइस पर अपना वक्तव्य संशोधित किया है , धन्यवाद दोस्तों।

SELECT id FROM users WHERE DATE(signup_date) = CURDATE()


ऐसा लगता है कि यह signup_date
डेटाइम

@ सरजियो हाँ, यह वर्तमान में एक डेटटाइम फ़ील्ड है।
जाको

क्या की डेटाप्रकार है signup_dateअगर यह समय होता है, तो आप में DATE_FORMAT उपयोग करना चाहते हैं जाएगा WHEREखंड समय पट्टी मैच के लिएCURDATE()
टैरिन

@bluefeet धन्यवाद, मैंने अपनी स्क्रिप्ट को संशोधित किया है। यह काम करने लगता है, लेकिन जब कोई परिणाम नहीं होता है। mysql_num_rows0 नहीं दिखाता है। बस एक रिक्त है।
जाको

जवाबों:


197
SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE DATE(signup_date) = CURDATE()

क्या DATE का उपयोग करना आवश्यक है (यहां तक ​​कि फ़ील्ड प्रकार दिनांक भी है?
राशिड्नक

2
@rashidnk नहीं। हालांकि उन्होंने इस प्रश्न में स्पष्ट रूप से नहीं कहा, लेकिन क्षेत्र स्पष्ट रूप से टाइप का है DATETIME
बारमर B

2
हालांकि यह समाधान बिल्कुल सही है, यह अच्छी तरह से पैमाने नहीं करता है ( signup_dateयदि कोई सूचकांक मौजूद नहीं है , तो भी इस तरह के सूचकांक का उपयोग नहीं किया जा सकता है)। सर्जियो के समाधान को प्राथमिकता दें ।
रैंडमसाइड

या यदि किसी विशेष तिथि पर पाया जाता है, तो सूचकांक का उपयोग `` के साथ भी किया जा रहा है। `` चुने हुए उपयोगकर्ता। -30 00:00:00 'और साइनअप_डेट <=' 2017-08-30 23:59:59 '; `` `
सुमित एम असोक

3
@SumitMAsok मिलिसेकंड < '2017-08-31 00:00:00'वाले MySQL के संस्करण का उपयोग करने की स्थिति में उपयोग करने के लिए बेहतर है ।
बारमर

29

यदि आपके पास signup_dateफ़ील्ड के लिए यह क्वेरी इंडेक्स का उपयोग करेगा

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
    FROM users 
    WHERE signup_date >= CURDATE() && signup_date < (CURDATE() + INTERVAL 1 DAY)

इस उत्तर के लिए अपमानजनक बेतुका है। यह वास्तव में पसंदीदा दृष्टिकोण है, क्योंकि यह क्वेरी signup_dateअन्य दृष्टिकोणों के विपरीत, एक सूचकांक का लाभ उठाने में सक्षम होगी ।
रैंडमसाइड

2
@RandomSeed signup_dateदो बार के बीच परीक्षण का सामान्य विचार सही है, लेकिन समय नहीं है। यह के बीच होना चाहिए 00:00और 23:59:59आज की तारीख पर।
बारमर

खैर तारीख का अंतराल भी गलत था> <।
रैंडमसाइड

यह क्वेरी अधिक प्रदर्शन करने वाली (इंडेक्स के कारण) है। WHERE DATE(signup_date) = CURDATE()अपने सर्वर ~ 50 एमएस ले लिया है, यह एक यहाँ 0.8 एमएस।
काई नैक


1

आप उपयोग कर सकते हैं CONCATके साथ CURDATE()दिन के पूरे समय और का उपयोग करके तो फिल्टर करने के लिए BETWEENमें WHEREहालत:

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE (users.signup_date BETWEEN CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59'))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.