Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在文本字段中搜索日期范围_Php_Mysql - Fatal编程技术网

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

Php 在文本字段中搜索日期范围,php,mysql,Php,Mysql,我在MYSQL数据库中有一个包含日期的文本字段,如01/01/2014、06/2014和2014 我喜欢在范围内执行搜索,如dd/mm/aaaa、mm/aa或aaaa 示例: 2013年1月1日至2014年1月11日 或 2013年8月至2014年9月 或 2013年至2014年 有关于创建mysql查询的帮助吗 输入后,我觉得这可能不是一个完整的解决方案,但我会把它留在这里 我的解决方案是修改您的表结构 假设保存这些日期的列是:date\u,格式为文本格式。您可以增加一列,例如: `date_

我在MYSQL数据库中有一个包含日期的文本字段,如
01/01/2014
06/2014
2014

我喜欢在范围内执行搜索,如
dd/mm/aaaa
mm/aa
aaaa

示例:

2013年1月1日至2014年1月11日

2013年8月至2014年9月

2013年至2014年

有关于创建mysql查询的帮助吗

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

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

假设保存这些日期的列是:
date\u,格式为文本格式
。您可以增加一列,例如:

`date_in_mysql_date_format` date NOT NULL DEFAULT '0000-00-00'
现在,无论何时在文本格式的
date\u列中放入日期:
解析日期,并将其放入mysql\date\u格式的
date\u列中

解析时,如果<代码> DD/<代码>不可用,请考虑<代码> 01 <代码>,如果<代码> mm <代码>无效,请将其视为<代码> 01 < /C> > 现在使用文本格式的

date\u列进行显示


并使用mysql\u date\u格式的
date\u进行搜索。

您可以在“01/01/2013”和“011/01/2014”之间的查询
字段名中使用between子句。

从表格中选择*
哪里

fieldname>=“01/01/2013”和fieldname您可以使用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;
选择*,
UNIX时间戳(STR_TO_DATE(日期开始,%d.%m.%Y%h:%i:%s)),作为conv_日期开始,
UNIX_时间戳(STR_TO_DATE(dateend,%d.%m.%Y%h:%i:%s')作为conv_dateend
从'theTable'开始
其中`fieldname`
比如“随便什么”
拥有(yourdate=`conv_datestart`)
由'conv_datestart'ASC订购
限值0,1;

但是你首先要适应你的日期时间格式。这有点脏,并且忽略了在mysql中正确存储datetime格式的内容,但它确实起到了作用。

听起来数据库结构是错误的。简化数据库结构这可能会有帮助:您好。所有日期都在文本字段中。例如:[2013年2月、2013年3月、2014年1月1日]使用日期时间而不是文本字段。然后可以简化查询。
 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;