मैं mysql में वर्तमान डेटाटाइम से 30 दिन कैसे घटाऊँ?
SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
मैं mysql में वर्तमान डेटाटाइम से 30 दिन कैसे घटाऊँ?
SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
जवाबों:
SELECT * FROM table
WHERE exec_datetime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
जो कोई भी उपयोग नहीं करना चाहता है DATE_SUB
, उसका उपयोग करें CURRENT_DATE
:
SELECT CURRENT_DATE - INTERVAL 30 DAY
NOW() - INTERVAL 30 DAY
। चूँकि प्रश्न "वर्तमान डेटाइम से 30 दिनों को घटाता है" का उल्लेख करता है , इसलिए यह वह नहीं हो सकता जो ओपी चाहता है।
current_timestamp
बजाय का उपयोग करेंcurrent_date
NOW()
जैसे आप किसी भी क्वेरी कैशिंग या ऑप्टिमाइज़ेशन को खो रहे हैं, उसका उपयोग न करें क्योंकि क्वेरी हर बार अलग होती है। उन कार्यों की सूची देखें जिन्हें आपको MySQL प्रलेखन में उपयोग नहीं करना चाहिए ।
नीचे दिए गए कोड में, मान लें कि यह तालिका समय के साथ बढ़ रही है। नया सामान जोड़ा गया है और आप पिछले 30 दिनों में सिर्फ सामान दिखाना चाहते हैं। यह सबसे आम मामला है।
ध्यान दें कि तारीख को एक स्ट्रिंग के रूप में जोड़ा गया है। अपने कॉलिंग कोड से इस तरह से तारीख जोड़ना बेहतर है, NOW()
क्योंकि यह आपके कैशिंग को मारता है।
SELECT * FROM table WHERE exec_datetime >= DATE_SUB('2012-06-12', INTERVAL 30 DAY);
आप उपयोग कर सकते हैं BETWEEN
यदि आप वास्तव में इस बहुत सेकंड से 30 से 30 दिन पहले सामान चाहते हैं, लेकिन यह मेरे अनुभव में एक सामान्य उपयोग का मामला नहीं है, तो मुझे उम्मीद है कि सरलीकृत क्वेरी आपको अच्छी सेवा दे सकती है।
NOW()
और फिर भी अपने उत्तर में इसका उपयोग करें। o_O PS: आपकी क्वेरी एक और परिणाम
BETWEEN
और >=
विभिन्न ऑपरेटर हैं, आप जानते हैं? मेरी क्वेरी 30 days ago AND today
इस के लिए निर्धारित परिणाम को सीमित करती है everything after 30 days ago
। इसलिए tomorrow
रिकॉर्ड मेरा और आपकी मूल क्वेरी के लिए मेल नहीं खाएंगे, लेकिन इस जवाब से मेल
MySQL अब से दिन घटाएँ:
select now(), now() - interval 1 day
प्रिंटों:
2014-10-08 09:00:56 2014-10-07 09:00:56
अन्य अंतराल अस्थायी अभिव्यक्ति इकाई तर्क:
https://dev.mysql.com/doc/refman/5.5/en/expressions.html#temporal-intervals
select now() - interval 1 microsecond
select now() - interval 1 second
select now() - interval 1 minute
select now() - interval 1 hour
select now() - interval 1 day
select now() - interval 1 week
select now() - interval 1 month
select now() - interval 1 year
आप भी उपयोग कर सकते हैं
select CURDATE()-INTERVAL 30 DAY
SELECT date_format(current_date - INTERVAL 50 DAY,'%d-%b-%Y')
आप एसक्यूएल में दिनांक प्रारूप का उपयोग करके प्रारूपित कर सकते हैं।
यदि आपको केवल दिनांक की आवश्यकता है, न कि समय उपयोग की:
select*from table where exec_datetime
between subdate(curdate(), 30)and curdate();
चूंकि curdate()
समय घटक को छोड़ दिया जाए, तो यह संभावित रूप से now()
उन मामलों में "शब्दार्थिक रूप से सही" की तुलना में अधिक तेज है जहां आप केवल तारीख में रुचि रखते हैं।
इसके अलावा, subdate()
2-धमनी अधिभार संभावित रूप से उपयोग करने की तुलना में तेज है interval
।
interval
उन मामलों के लिए होता है जब आपको एक गैर-दिन घटक की आवश्यकता होती है।
subdate(curdate(), 30)
यह किसकी तुलना में घातक है CURRENT_DATE - INTERVAL 30 DAY
? क्या आपके पास सबूत है? और कितनी तेजी से होगा? कुछ माइक्रोसेकंड?
subdate
तेजी से संभावित रूप से किसी भी तरह से समझाया जा सकता है, आपकी राय में, इसके "2-एरिटी ओवरलोड" द्वारा, लेकिन, कृपया मुझे माफ कर दें अगर यह एक बेवकूफ सवाल है, तो उन शब्दों का क्या मतलब है (एक फ़ंक्शन के संबंध में) )? विशेष रूप से, "2-आरती" क्या है?
curdate()
वास्तव में गलत विकल्प हो सकता है, क्योंकि ओपी को "मौजूदा डेटाइम से 30 दिन घटाना " (जोर मेरा) लगता है।