2011-06-26 147 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)“。