2012-11-26 13 views
0

(這問題看似容易或種類noobish的,由我原諒我的無知。)驗證MySQL查詢中的日期範圍

我用PDO查詢使用SELECT然後取出一些值,它涉及到我只需要提取在其開始日期和結束日期內的一些條目。

我的數據庫

+----------+-----------------+----------------------+--------------------+ 
| id (INT) | title (VARCHAR) | start_date (VARCHAR) | end_date (VARCHAR) | 
+----------+-----------------+----------------------+--------------------+ 
| 1  |  buddy  |  2012-11-26  |  2012-11-30  | 
| 2  |  metro  |  2012-12-05  |  2012-12-20  | 
| 3  |  justin  |  2012-11-28  |  2012-12-01  | 
+----------+-----------------+----------------------+--------------------+ 

我的查詢如下:

$query = "SELECT title, start_date, end_date FROM debts WHERE start_date >= CURDATE() AND end_date >= CURDATE()"; 

我想實現的是每當start_date是當今以上,但不超過end_date這將是有效的。這將返回行id 1,但是如果我將start_date更改爲2012-11-25,它將因AND上的第一個條件而失敗。因爲我對此很陌生,所以我對此非常困惑,是否有內置函數來處理這種情況?

+0

起始日期> = CURDATE()日期和結束日期> = CURDATE( )。很抱歉,我不明白 – harry

+0

部分在比較日期時使用date_format(),http://www.w3schools.com/sql/func_date_format.asp –

+0

你的意思是「它會失敗」...... do你得到一個錯誤?如果是,哪一個? –

回答

1

這是更好的:

SELECT標題,日期,結束日期從債務 WHERE日期(NOW())之間的起始日期日期和結束日期

+0

因此,它意味着它包含'start_date' /'end_date'上指定的日期? – fishcracker

+0

是的,它使用start_date和end_date字段上的索引。在此處閱讀更多內容 http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between – Stanislav

0
SELECT title, start_date, end_date FROM debts 
WHERE start_date >= CURDATE() AND end_date <= CURDATE()