2010-01-11 15 views
85

मैं सभी रिकॉर्ड है कि पिछले 30 दिनों में डेटाबेस के लिए जोड़ा गया था वापस करना चाहते बीच रिकॉर्ड्स। प्रदर्शन उद्देश्यों के कारण मुझे तिथि को मिमी/डीडी/वाई में परिवर्तित करने की आवश्यकता है।MySQL क्वेरी - आज और पिछले 30 दिन

create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y')) 

मेरे बयान पिछले 30 दिनों के लिए रिकॉर्ड को सीमित करने में विफल रहता है - यह सब रिकॉर्ड चयन करता है।

क्या कोई मुझे सही दिशा में इंगित कर सकता है? ऐसा लगता है कि मैं करीब हूँ।

धन्यवाद और एक महान सप्ताह की है।

उत्तर

201

आप SELECT खंड में DATE_FORMAT लागू करने की आवश्यकता है, न कि WHERE खंड:

SELECT DATE_FORMAT(create_date, '%m/%d/%Y') 
FROM mytable 
WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE() 

भी ध्यान रखें कि CURDATE() रिटर्न तारीख से केवल DATE भाग, इसलिए यदि आप समय के साथ एक DATETIME रूप create_date की दुकान भाग भरा, यह क्वेरी आज के रिकॉर्ड का चयन नहीं करेगी। ताकि आप अपने BETWEEN खंड है, जो आप के रूप में काम करने के लिए नहीं जा रहा है में दो तार का उपयोग कर रहे

SELECT DATE_FORMAT(create_date, '%m/%d/%Y') 
FROM mytable 
WHERE create_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW() 
+0

धन्यवाद यह मेरे लिए काम किया। – Brij

+1

भी समझा यह कैसे काम करता है, तो एक एक DATETIME स्तंभ है के लिए धन्यवाद। बहुत बढ़िया! अंततः कई खोजों के बाद – Adam

+0

आपको मिला। ;) +1 और अच्छा स्पष्टीकरण –

8

DATE_FORMAT एक स्ट्रिंग रिटर्न:

इस मामले में, आप के बजाय NOW का उपयोग करना होगा उम्मीद करते हैं।

इसके बजाय, दिनांक को SELECT में अपने प्रारूप में रूपांतरित करें और वास्तविक तिथियों के लिए BETWEEN करें। उदाहरण के लिए,

SELECT DATE_FORMAT(create_date, '%m/%d/%y') as create_date_formatted 
FROM table 
WHERE create_date BETWEEN (CURDATE() - INTERVAL 30 DAY) AND CURDATE() 
46
SELECT 
    * 
FROM 
    <table_name> 
WHERE 
    <date_field> BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) 
AND NOW(); 
+2

मैं CURDATE के बीच के लिए इस विधि पसंद करते हैं() - INTERVAL 30 – Dan

+0

@ErmSo मुझे पता कर सकते हैं क्यों? – slim

+1

मैं झूठ नहीं बोलूंगा - वह 2 साल पहले था और मुझे याद नहीं है! क्षमा करें: पी – Dan

4

आज की तारीख गतिविधि और पिछले 30 दिनों के लिए पूरी गतिविधि के लिए, इस का उपयोग के बाद से SYSDATE पिछले 30 वें दिन उस दिन के लिए पूरे डेटा नहीं होगा एक दिन में चर रहा है।

SELECT DATE_FORMAT(create_date, '%m/%d/%Y') 
FROM mytable 
WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND SYSDATE() 
6

इस mysql में लिख सकते हैं -

SELECT DATE_FORMAT(create_date, '%m/%d/%Y') 
FROM mytable 
WHERE create_date < DATE_ADD(NOW(), INTERVAL +1 MONTH); 
3

मैं कुछ इस तरह करना होगा:

SELECT DATE_FORMAT(create_date, '%m/%d/%Y') 
FROM mytable 
WHERE create_date >= (CURDATE() - INTERVAL 30 DAY) 
+0

लिए काम नहीं करता इस CURDATE परे डेटा रिकॉर्ड दिखाएगा उपयोग करने के लिए कोई ज़रूरत नहीं()। – xam

-1

यहाँ curdate() समारोह का उपयोग किए बिना एक समाधान है, यह उन लोगों के लिए एक समाधान है TSQL का उपयोग, जो मुझे लगता है कि

SELECT myDate 
FROM myTable 
WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE() 
संबंधित मुद्दे