选择PHP MySQL日期范围

3
我有一个发票类型的表单提交,每个提交都有一个日期,所以我在mysql数据库中创建了一个varchar日期字段来保存时间。时间格式为'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>";
  }

谢谢。


1
MySQL实际上有一个“日期”类型,因此您不需要使用VARCHAR来存储日期。 - Matt Healy
@matthewh是的,我也尝试过那个方法,但我的结果页面仍然是空白的。有什么想法吗? - Kanchana Randika
3个回答

11
如果您使用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 |
+----+---------------------+

就是这样。


谢谢伙计。我尝试了,但是 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; }
- Kanchana Randika
1
你把日期放在引号里面,对吧?我正在尝试在PHP上实现。 - dave

2
如果日期列是TIMESTAMP或DATETIME类型,则查询应为:
SELECT * FROM table_name 
WHERE 'date' 
BETWEEN '2011-06-02' AND '2011-06-25'

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


1
我尝试了你的解决方案,但是结果仍然是一个空白页面。现在我的日期数据在我将其更改为DATETIME后出现在数据库中的方式如下:> 2011-06-22 00:00:00 - Kanchana Randika

2
  1. 列名 - 可以不用或者用反引号括起来
  2. 如果日期是varchar类型 - 需要进行日期转换 SELECT * FROM my_table WHERE cast(日期 as DATE) BETWEEN CAST('2011-06-02' AS DATE) AND CAST('2011-06-25' AS DATE)";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接