2012-01-19 40 views

回答

7

我不確定,如果你想抓取從1月到6月的所有行,只有直到6月1日的行或從1月到5月的所有行。你可以使用例如:

[...] WHERE `date_column` BETWEEN '2012-01-01' AND '2012-06-01' 

它給你所有行,包括6月1日。

使用這個來從月的整月的所有行至六月:

[...] WHERE YEAR(`date_column`)=2012 AND MONTH(`date_column`) BETWEEN 1 AND 6 

(改變BETWEEN 1 AND 5爲一月至五月)

+1

警告詞:如果'date_column'是一個帶時間分量的類型,那麼'date_column BETWEEN'2012-01-01'AND'2012-06-01''不會返回,例如, date_column的值是「2012年6月1日上午12:34」。它將在2012-06-01 00:00截止。這對初學者來說似乎有點不直觀,所以我想我會特別提到它。 –

+0

@MattGibson好點。替代方法:使用'DATE(date_column)'而不是'date_column'。 – DerVO

+0

如果您使用的是帶有時間分量的'date_column',而不是您可以使用'MONTH(CAST(date_time AS DATE))解析該值' – CodeWhisperer

1

您可以使用month(),year()day()函數。因此,您的查詢看起來像類似

SELECT * FROM table WHERE month(date_field) >= 1 AND month(date_field) <= 6 AND year(date_field) = 2011 

DATE_FIELD應該是一個日期或日期時間字段,如果它是一個時間戳,您需要使用FROM_UNIXTIMESTAMP功能,所以它看起來像month(FROM_UNIXTIMESTAMP(timestamp_field))

2

假設列在MySQL中是正確的格式(日期/日期),你可以簡單地比較(>,<):

SELECT somecolumn 
FROM sometable 
WHERE datecolumn >= '2012-01-01' AND datecolumn < '2012-06-01' 

希望它能幫助!

+0

哇 - 真棒響應傢伙!看起來像你所有的方法應該做的伎倆!再次感謝 – Zabs

0
SELECT 
    * 
FROM 
    yourtable 
WHERE 
    date BETWEEN '2012-01-01' AND '2012-06-01'; 
4

如果您生成在PHP中的SQL查詢,你可以使用BETWEEN

$date = date("Y") . '-' . date("m") . '-01'; 
$sql = "SELECT * 
FROM `table` 
WHERE `date_column` BETWEEN '$date' AND '$date' + INTERVAL 1 MONTH - INTERVAL 1 DAY"; 

(我減去一天排除t他下個月第一天)

或者你可以使用EXTRACT

$month = 5; 
$sql = 'SELECT * 
FROM `table` 
WHERE EXTRACT(MONTH FROM `date_column`) = ' . $month; 
+0

您的第一個想法並不是那麼熱門,因爲如果您從1月份開始1個月最終在0月份不存在..相反,在PHP中使用make time命令會更好嗎? – Paul

+1

@Paul,讓我不同意:正確地添加/減去間隔處理這種情況。在這個例子中,你建議它將在去年的12月份返回。 – Minras

+0

值得指出 – Paul

相關問題