2012-10-07 182 views
0

我想從mysql數據庫獲取迄今爲止的記錄。我寫了這一點,但它不工作:SQL查詢無法正常工作

$from_date = "2012-06-19"; 
$to_date = "2012-06-24"; 

SELECT * 
    FROM `contracts` 
WHERE `indate` >= '$from_date' 
    AND `indate` <= '$to_date' 
ORDER BY `id` DESC 

我的日期:2012-06-202012-06-212012-06-222012-06-23

+0

看看BETWEEN()函數 – 2012-10-07 03:57:04

+6

當你說* MySQL的 「這是行不通的,」 *是什麼意思?你有錯誤嗎?如果是這樣,在PHP端或MySQL端?還是它沒有返回你期望的行?還是它根本沒有返回任何行?那麼'indate'的數據類型是什麼?請更具體一些。 – NullUserException

+0

你能顯示實際的PHP代碼嗎?我沒有看到你的SQL有什麼問題 - 它應該返回你指定的日期。您是否嘗試過直接通過MySQL客戶端而不是PHP來運行此SQL?如果錯誤來自PHP或MySQL,那麼這是縮小範圍的好方法。正如NullUserException所說,錯誤是什麼? –

回答

0

你在做什麼應該工作的罰款。我一直在工作中從這樣的日期字段中選擇。

mysql> create table contracts (indate date); 
Query OK, 0 rows affected (0.02 sec) 

mysql> insert into contracts values ('2012-10-06'), ('2012-11-04'), ('2012-09-17'); 
Query OK, 3 rows affected (0.00 sec) 
Records: 3 Duplicates: 0 Warnings: 0 

mysql> set @from_date = '2012-10-01'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> set @to_date = '2012-10-31'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> select * from contracts where indate >= @from_date and indate <= @to_date; 
+------------+ 
| indate  | 
+------------+ 
| 2012-10-06 | 
+------------+ 
1 row in set (0.00 sec) 

我當然在這裏使用了mysql變量,但是對他們沒有任何幫助;他們只包含字符串。你可以這樣做,而不是:

mysql> select * from contracts where indate >= '2012-10-01' and indate <= '2012-10-31'; 
+------------+ 
| indate  | 
+------------+ 
| 2012-10-06 | 
+------------+ 
1 row in set (0.00 sec) 

的O.P.是正確的,雖然,之間更簡潔:

mysql> select * from contracts where indate between '2012-10-01' and '2012-10-31'; 
+------------+ 
| indate  | 
+------------+ 
| 2012-10-06 | 
+------------+ 
1 row in set (0.00 sec) 

日期比較神奇的是,因爲該領域是日期類型。

0

嘗試以下:

SELECT * 
     FROM contracts 
    WHERE indate >= to_date('2012-06-19','yyyy-mm-dd') 
     AND indate <= to_date('2012-06-24','yyyy-mm-dd') 
    ORDER BY id DESC