MySQL查询显示结果超出范围

时间:2019-02-11 12:15:51

标签: mysqli

我的带有ajax的search.php文件中具有以下mysqli查询。

SELECT demand2.* FROM demand2 
WHERE ddate >= '$dto' AND ddate >= '$dfrom' AND !(mach='--' OR mach='-' OR mach='' OR mach='----' OR mach='-----' OR mach='---');

字段ddate varchar2

的数据类型

当我输入Date from 01-01-2019 and Date To 30-01-2019时,它会显示具有前一个日期(如29-12-2019)的结果。

所以我找不到在指定范围内得到结果的解决方案。请帮忙。

1 个答案:

答案 0 :(得分:0)

就像rypskar所说的,您的字段类型应该是日期。

如果您不想更改字段的数据类型,则必须使用STR_TO_DATE(ddate,'%d-%m-%Y')将字符串转换为日期。但是不建议这样做,因为它会导致较大的表的性能下降。

所以您的查询就是这样(未经测试!):

SELECT demand2.* FROM demand2 
WHERE STR_TO_DATE(ddate, '%d-%m-%Y') >= STR_TO_DATE('$dto', '%d-%m-%Y') AND STR_TO_DATE(ddate, '%d-%m-%Y') >= STR_TO_DATE('$dfrom', '%d-%m-%Y') AND !(mach='--' OR mach='-' OR mach='' OR    mach='----' OR mach='-----' OR mach='---');

如果要保留字段的varchar类型而不进行任何运行时转换,则必须将格式更改为Y-m-d,因此与字符集的比较将与日期比较相同。

现在,您将获得29-12-2019的结果,因为29在1到30之间。