2011-10-10 15 views
7

मुझे तालिका से परिणाम प्राप्त करने की आवश्यकता है, जिस तारीख को वर्तमान तिथि से 5 का अंतर होना चाहिए।MySQL Datediff क्वेरी

यानी, specific_date कॉलम मेरी तालिका में मौजूद है। तिथि का प्रारूप YYYY-MM-DD है।

मैं क्वेरी कुछ की तरह,

SELECT * FROM `table_name` WHERE DATEDIFF(NOW(), specific_date) < 5 

उत्तर

6

ऐसा लगता है कि आप ऐसा करने की कोशिश कर रहे उपयोग करने के लिए है:

सभी की
WHERE specific_date < (NOW() + 5 days) 

पहले, सीमा मामलों के बारे में अच्छी तरह सोच। ये सीमा मामले एसक्यूएल में आपके एंगल्स काट सकते हैं। आप वास्तव में

WHERE specific_date <= (NOW() + 5 days) 

अपने specific_date कॉलम timestamps केवल दिन (कि आधी रात के बराबर समय के साथ तारीखों है) होते हैं या वे दिनांक और समय होते हैं क्या करना चाहते हैं? यदि आप अपने इच्छित परिणाम प्राप्त करने जा रहे हैं, तो आपको उन विवरणों के बारे में सावधान रहना होगा।

किसी भी हाल में इस प्रयास करें:

WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 5 DAY) 

यह इस तरह के एक देखने करने के लिए एक अच्छा तरीका है। कॉलम मान असमानता अनुमान (<=) के एक तरफ अकेले खड़ा है, इसलिए यदि आपके पास कॉलम पर कोई अनुक्रमणिका है तो MySQL इंडेक्स रेंज स्कैन कर सकता है।

MySQL में अंकगणित दिनांक काफी लचीला है। आप

NOW() + INTERVAL 10 SECOND 
    NOW() - INTERVAL 2 MINUTE 
    NOW() + INTERVAL 4 HOUR 
    CURDATE() - INTERVAL 1 WEEK /* midnight one week ago */ 
    LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH /*first day of present month*/ 
    NOW() - INTERVAL 1 QUARTER 
    CURDATE() - INTERVAL 5 YEAR 

और बहुत कुछ कर सकते हैं।

+0

हाँ धन्यवाद, यह काम किया। – sathish

+0

क्या यह घंटों के साथ भी काम करता है? उदाहरण के लिए: जहां विशिष्ट_डेट <= DATE_ADD (अब(), अंतराल 24 घंटा) ' –

+0

हां, मेरा संपादन देखें। –

3

BETWEEN ऑपरेटर पर एक नज़र डालें की जरूरत है।

expr BETWEEN min AND max 

एक और तरीका है DATE_SUB ऑपरेटर

WHERE date_column > DATE_SUB(NOW(), INTERVAL 5 DAY)