在文本字段中搜索日期范围

时间:2014-04-23 20:38:17

标签: php mysql

我在MYSQL数据库中有一个文本字段,其中包含01/01/201406/20142014

等日期

我想在范围内执行dd/mm/aaaamm/aaaaaa等搜索。

示例:

  

01/01/2013至011/01/2014

  

08/2013至09/2014

  

2013年至2014年

有关创建mysql查询的任何帮助吗?

3 个答案:

答案 0 :(得分:1)

您可以在查询fieldname BETWEEN '01/01/2013' AND '011/01/2014'

中使用between子句

OR

SELECT * FROM theTable 
WHERE 
  fieldname >= '01/01/2013' AND fieldname <= '011/01/2014'

答案 1 :(得分:0)

  

输入之后,我觉得这可能不是一个完整的解决方案,但我会留在这里。

我的解决方案是修改表结构。

说明保留这些日期的列是:date_in_text_format。您可以添加其他列,例如:

`date_in_mysql_date_format` date NOT NULL DEFAULT '0000-00-00'

现在每当您在date_in_text_format列中添加日期时:
解析日期并将其放入date_in_mysql_date_format列。

解析时,如果dd不可用,请考虑01,如果mm不可用,请将其视为01

现在使用您的date_in_text_format列进行显示。

并使用date_in_mysql_date_format进行搜索。

答案 2 :(得分:0)

您可以使用mysql函数动态转换日期/时间格式,设置如下别名:

 SELECT *, 
 UNIX_TIMESTAMP(STR_TO_DATE(datestart,'%d.%m.%Y %h:%i:%s')) as conv_datestart, 
 UNIX_TIMESTAMP(STR_TO_DATE(dateend,'%d.%m.%Y %h:%i:%s')) as conv_dateend 
 FROM `theTable` 
 WHERE `fieldname` 
 LIKE 'WHATEVER' 
 HAVING (yourdate <= `conv_dateend` AND yourdate >= `conv_datestart`) 
 ORDER BY `conv_datestart` ASC 
 LIMIT 0,1;

但是你首先必须根据你的日期时间格式进行调整。这有点脏,并且忽略了在日期时间格式的mysql中正确存储,但它完成了这项工作。