2011-06-26 145 views
3

我有一個發票類型表單提交,每個提交都有一個日期,所以我在mysql數據庫中創建了一個varcha日期字段以節省時間。時間格式類似於'2011-06-26'。現在我需要從我的數據庫中選擇一個基於日期的範圍。我嘗試了以下選項,但它們不顯示任何結果,只顯示空白頁,甚至沒有錯誤。PHP mysql選擇日期範圍

我應該遵循一些特殊的技術來保存日期到我的數據庫。如果是這樣,請給我一些解釋,因爲我是PHP和MYSQL開發的新手。

SELECT * FROM table_name 
WHERE 'date' 
BETWEEN UNIX_TIMESTAMP('2011-06-02') AND UNIX_TIMESTAMP('2011-06-25') 




SELECT * FROM my_table 
WHERE 'date' 
BETWEEN CAST('2011-06-02' AS DATE) AND CAST('2011-06-25' AS DATE)"; 

這是我用來提取數據

$result=mysql_query($query); 
    while($row=mysql_fetch_array($result)){ 
     echo $row['tax']."<br>"; 
    } 

謝謝。

+1

的MySQL實際上有一個「日」型,這樣你就不需要使用VARCHAR來存儲您的日期 –

+0

@matthewh 雅我想,也但是我的結果頁面是blank.Any的想法? – Learner

回答

8

如果使用DATETIME類型來存儲您的日期的伎倆很簡單 DATETIME允許您存儲日期和時間戳但是,如果僅指定日期,那麼timesta mp將存儲爲00:00:00

我會告訴你一個簡單的例子。

mysql> CREATE TABLE test_table(
     id INT UNSIGNED AUTO_INCREMENT, 
     test_date DATETIME, 
     PRIMARY KEY (id)); 

mysql> INSERT INTO test_table(test_date) 
     VALUES('2011-06-26'), ('2011-05-14'), ('2011-05-02'); 

mysql> SELECT * FROM test_table; 
+----+---------------------+ 
| id | test_date   | 
+----+---------------------+ 
| 1 | 2011-06-26 00:00:00 | 
+----+---------------------+ 
| 2 | 2011-05-14 00:00:00 | 
+----+---------------------+ 
| 3 | 2011-05-02 00:00:00 | 
+----+---------------------+ 

mysql> SELECT * FROM test_table WHERE test_date 
     BETWEEN '2011-05-01' AND '2011-05-31'; 
+----+---------------------+ 
| id | test_date   | 
+----+---------------------+ 
| 2 | 2011-05-14 00:00:00 | 
+----+---------------------+ 
| 3 | 2011-05-02 00:00:00 | 
+----+---------------------+ 

就是這樣。

+0

Thanx buddy.I嘗試,但PHP結果仍然是空白。這是我的代碼獲取數據。 $ query =「SELECT * FROM my_table WHERE date BETWEEN 2011-06-02 AND 2011-06-25」; $ result = mysql_query($ query); while($ row = mysql_fetch_array($ result)){ $ data = $ row [「tax」]; echo $ data; } – Learner

+1

你把引號之間的日期,不是嗎?我在PHP上嘗試它。 – dave

+0

Thanx buddy Ya它是quotes.Now它的工作。 – Learner

1

如果日期列是TIMESTAMP或DATETIME類型的那麼查詢應該是:

SELECT * FROM table_name 
WHERE 'date' 
BETWEEN '2011-06-02' AND '2011-06-25' 

編輯:對不起沒看到柱子是VARCHAR - 你應該將它更改爲DATETIME類型使事情變得更簡單。

+0

我嘗試了你的解決方案buddy.But仍然得到一個空白頁作爲結果。現在這是我的日期數據出現在數據庫中後,我將其更改爲DATETIME。 > 2011-06-22 00:00:00 – Learner

1
  1. 列的名稱 - 或沒有或反引號
  2. 如果日期爲varchar - 還需要投日期 SELECT * FROM MY_TABLE WHERE投(date爲DATE) BETWEEN CAST('2011-06-02 「AS DATE)和CAST(」 2011-06-25' AS DATE)「。