PHP mysql选择日期范围

时间:2011-06-26 08:18:44

标签: php mysql

我有发票类型表单提交,每个提交都有一个日期,所以我在mysql数据库中创建了一个varcha日期字段来节省时间。时间格式就像'2011-06-26'。现在我需要选择一个范围基于我的数据库中的日期。我尝试了以下选项,但它们不显示任何结果只显示空白页,甚至没有错误。

我应该遵循一些特殊的技术来保存日期到我的数据库。如果是这样,请给我一些解释,因为我是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>";
  }

谢谢。

3 个答案:

答案 0 :(得分:8)

如果您使用DATETIME类型来存储日期,那么技巧很简单。 DATETIME允许您存储日期和时间戳,但是如果仅指定了日期,则时间戳将存储为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 |
+----+---------------------+

就是这样。

答案 1 :(得分:2)

  1. 列名称 - 或没有或在反引号中
  2. 如果日期是varchar - 也需要投射日期 SELECT * FROM my_table 强制转换(date为DATE) 之间的比赛('2011-06-02'日期)和CAST('2011-06-25'作为日期)“;

答案 2 :(得分:1)

如果日期列是TIMESTAMP或DATETIME类型,则查询应为:

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

编辑:抱歉没有看到该列是VARCHAR - 您应该将其更改为DATETIME类型以使事情更简单。