2012-11-26 13 views
9
offers.date = CURDATE() 

मेरे पास वर्तमान में क्या है।पकड़ें जहां CURDATE() और दिन पहले MySQL

यह आज के लिए ऑफ़र प्रदान करता है, लेकिन मैं कल के लिए ऑर्डर लेना चाहता हूं।

कल की तारीख निर्दिष्ट किए बिना मैं यह कैसे कर सकता हूं?

उत्तर

27

CURDATE शून्य से या के साथ साथ एक अंतराल (जैसे कल) का उपयोग करने के लिए आप DATE_ADD समारोह

SELECT DATE_ADD(CURDATE(), INTERVAL -1 DAY); 

तो उपयोग कर सकते हैं, आपके मामले में आप इसे इस तरह का उपयोग करें:

WHERE offers.date = CURDATE() OR offers.date = DATE_ADD(CURDATE(), INTERVAL -1 DAY) 

वैकल्पिक रूप से आप कर सकते हैं DATE_SUB() फ़ंक्शन का उपयोग करें और नकारात्मक अंतराल के बजाय एक ही अंतराल का उपयोग करें लेकिन सकारात्मक।

इस प्रकार, DATE_ADD(CURDATE(), INTERVAL -1 DAY) @ edwardmp के जवाब पर DATE_SUB(CURDATE(), INTERVAL 1 DAY)

+0

क्या करने में गलत है (CURDATE() - 1): यह ठीक काम कर रहा है। –

+2

@ murtaza.webdev जो सभी परिस्थितियों में काम नहीं करता है: यदि CURDATE() जून का पहला है, तो 1 घटाकर 0 जून तक पहुंच जाएगा .. https://bugs.mysql.com/bug.php?id= देखें 3958 – edwardmp

6

भवन बन जाएगा, मैं DATE_ADD() का उपयोग करने से इस वाक्य से थोड़ा अधिक पठनीय लगता है:

current_date() - interval 1 day 

इसके अलावा, मैं OR के बजाय IN का प्रयोग करेंगे यह आसान बनाने के लिए इसे अपने बाकी हिस्सों के साथ संयोजित करने के लिए जहां कोष्ठक के बारे में ज्यादा चिंता किए बिना खंड:

WHERE offers.date in (current_date(), current_date() - interval 1 day) 
6

मुझे लगता है जैसे कि यह आसान होगा सिर्फ यह भी

offers.date between (current_date() - interval 1 day) and current_date 

एनबी हो सकता है निम्न

WHERE offers.date >= CURDATE() - INTERVAL 1 day 
0

कहने के लिए: अगर offers.date क्योंकि एक datetime मूल्य है कि इस असफल हो जायेगी (2017-01-02) < (2017-01-02 12:34:56) तथ्य 2017-01-02 वास्तव में 2017-01-02 00:00:00 है।

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