2012-08-04 162 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 2012-08-04 11:22:09

回答

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 2013-10-23 10:19:35

+0

你是對的@ shin – abhi 2013-10-23 10:20:30

+1

如果'date'是**日期時間**,那麼我們必須使用DATE(日期)來正確比較它。 – Geoff 2013-11-05 23:36:49

4
select * from table_name 
where `date` between curdate() - dayofmonth(curdate()) + 1 
       and curdate() 

SQLFiddle example

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

合理使用邏輯:) – 2014-10-24 13:14:13

+1

使用['DAY'代替'DAYOFMONTH'](http://stackoverflow.com/a/ 632951分之28966866)。另外,使用'subdate'的2-arity重載。它比三維'date_sub'快。 – Pacerier 2015-03-10 15:32:02

+0

使用這種方法的警告是,如果您嘗試返回到前幾個月,它會中斷,使其成爲實施的一段危險代碼。這裏提供了更好更優雅的解決方案,可以更好地適應擴展。 – tpartee 2015-10-21 18:39:40

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(); 

作爲日期介於一個月的第一天之間,現在相當於本月和之前的日期。不過,我確實覺得這比其他方法更容易。

2

試試這個:

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 
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(); 
相關問題