2012-08-04 12 views
35

मुझे वर्तमान माह और वर्तमान दिन के पहले दिन के बीच MySQL डेटाबेस से डेटा का चयन करने की आवश्यकता है।मैं वर्तमान माह का पहला दिन कैसे प्राप्त करूं?

select*from table_name 
where date between "1st day of current month" and "current day" 

क्या कोई इस प्रश्न का कार्य उदाहरण प्रदान कर सकता है?

+0

संभवतः संदर्भ http://stackoverflow.com/questions/3887509/mysqls-now-1-day – Giberno

उत्तर

91
select * from table_name 
where (date between DATE_ADD(LAST_DAY(DATE_SUB(CURDATE(), interval 30 day), interval 1 day) AND CURDATE()) 

या बेहतर:

select * from table_name 
where (date between DATE_FORMAT(NOW() ,'%Y-%m-01') AND NOW()) 
+5

30 घटाने पर जबकि तारीख इसी माह 31 देता है ... – shin

+0

उर सही @ शिन – abhi

+1

यदि 'date' एक ** डेटाटाइम ** है तो हमें इसे सही ढंग से तुलना करने के लिए DATE (दिनांक) का उपयोग करना पड़ा। – Geoff

0
select * from table 
where date between 
(date_add (CURRENT_DATE, INTERVAL(1 - DAYOFMonth(CURRENT_DATE)) day)) and current_date; 
21

मैं एक ऐसी ही क्वेरी, जहां मैं अपने प्रश्न में एक महीने के पहले दिन का उपयोग करने के लिए आवश्यक के लिए देख रहा था। last_day फ़ंक्शन मेरे लिए काम नहीं किया लेकिन DAYOFMONTH काम में आया।

तो यदि कोई भी एक ही समस्या की तलाश में है, तो निम्न कोड वर्तमान माह के पहले दिन की तारीख लौटाता है।

SELECT DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY); 

महीने के पहले दिन के साथ डेट स्तंभ तुलना:

select * from table_name where date between 
DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY) and CURRENT_DATE 
+0

तर्क का अच्छा उपयोग :) –

+1

' DAYOFMONTH' के बजाय ['DAY'] का उपयोग करें (http://stackoverflow.com/a/ 28966866/632951)। इसके अलावा, इसके बजाय 'subdate' के 2-arity अधिभार का उपयोग करें। यह 3-arity 'date_sub' से तेज़ है। – Pacerier

+0

इस विधि के साथ चेतावनी यह है कि यदि आप पिछले महीनों में वापस जाने का प्रयास करते हैं तो यह टूट जाता है, जिससे इसे कार्यान्वित करने के लिए कोड का एक खतरनाक टुकड़ा बना दिया जाता है। यहां पेश किए गए बेहतर और अधिक सुरुचिपूर्ण समाधान हैं जो विस्तार के लिए अधिक अनुकूल हैं। – tpartee

0
mysql चालू माह और चालू वर्ष के लिए

पूरा समाधान जो ठीक से और साथ ही अनुक्रमण का उपयोग करता है :)

-- Current month 
SELECT id, timestampfield 
    FROM table1 
WHERE timestampfield >= DATE_SUB(CURRENT_DATE, INTERVAL DAYOFMONTH(CURRENT_DATE)-1 DAY) 
    AND timestampfield <= LAST_DAY(CURRENT_DATE); 

-- Current year 
SELECT id, timestampfield 
    FROM table1 
WHERE timestampfield >= DATE_SUB(CURRENT_DATE, INTERVAL DAYOFYEAR(CURRENT_DATE)-1 DAY) 
    AND timestampfield <= LAST_DAY(CURRENT_DATE); 
-1
SET @date:='2012-07-11'; 
SELECT date_add(date_add(LAST_DAY(@date),interval 1 DAY), 
     interval -1 MONTH) AS first_day 
0

एक कम रूढ़िवादी दृष्टिकोण हो सकता है

SELECT * FROM table_name 
WHERE LEFT(table_name.date, 7) = LEFT(CURDATE(), 7) 
    AND table_name.date <= CURDATE(); 

एक महीने के पहले के बीच की तारीख के रूप में और अब इस महीने की तारीख के बराबर है, और इससे पहले। मुझे लगता है कि कुछ अन्य दृष्टिकोणों की तुलना में यह आंखों पर थोड़ा आसान है।

SET @StartDate = DATE_SUB(DATE(NOW()),INTERVAL (DAY(NOW())-1) DAY); 
SET @EndDate = ADDDATE(CURDATE(),1); 
select * from table where (date >= @StartDate and date < @EndDate); 
2

इस प्रयास करें। यह अतीत में मेरे लिए बहुत अच्छा काम किया है।

select date(now()) - interval day(now()) day + interval 1 day 
2

मैं निम्न क्वेरी का इस्तेमाल किया है:

0
SELECT date_sub(current_date(),interval dayofmonth(current_date())-1 day) as first_day_of_month; 
0
select * from <table> 
where <dateValue> between last_day(curdate() - interval 1 month + interval 1 day) 
        and curdate();