2012-10-01 14 views
49

मैं एक MySQL चयन कथन चलाने की कोशिश कर रहा हूं जहां यह आज की तारीख को देखता है और केवल उस दिन पर हस्ताक्षरित परिणाम लौटाता है। मैंने वर्तमान में निम्नलिखित की कोशिश की है, लेकिन यह काम नहीं कर रहा है।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()

+0

ऐसा लगता है कि 'signup_date' डेटाटाइम फ़ील्ड – Serjio

+0

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

+0

यदि इसमें समय है, तो 'signup_date' की डेटाटाइप क्या है, तो आप' WHERE' क्लॉज (' – Taryn

उत्तर

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

का उपयोग नहीं करती है, क्या DATE() का उपयोग करना आवश्यक है, यहां तक ​​कि फ़ील्ड टाइप की तारीख है? – rashidnk

+1

@rashidnk नहीं। हालांकि उन्होंने सवाल में स्पष्ट रूप से नहीं कहा था, लेकिन क्षेत्र स्पष्ट रूप से 'DATETIME' प्रकार का है। – Barmar

+1

हालांकि यह समाधान बिल्कुल सही है, यह अच्छी तरह से स्केल नहीं करता है ('साइनअप_डेट' पर एक सूचकांक का उपयोग नहीं कर सकता है, भले ही ऐसी अनुक्रमणिका मौजूद हो)। [सर्जियो का समाधान] पसंद करें (http://stackoverflow.com/a/12677822/1446005)। – RandomSeed

9

ध्वनि आप की तरह WHERE लिए स्वरूपण जोड़ने की जरूरत:

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

देखें SQL Fiddle with Demo

+5

अपने प्रदर्शन के लिए अलविदा कहें। यह क्वेरी कभी भी इंडेक्स – Serjio

12

आप 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) 
+0

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

+0

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

+1

@ बामार हां आप सही हैं। मैंने जवाब तय किया। – RandomSeed

संबंधित मुद्दे