MySQL查询显示结果超出范围

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL查询显示结果超出范围相关的知识,希望对你有一定的参考价值。

我在与阿贾克斯的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的数据类型

当我输入的日期从2019年1月1日和日期30-01-2019了,会显示一个日期一样29-12-2019结果。

因此,我不能找到解决方案,使得到规定的范围内。请帮忙。

答案

正如rypskar说,你的领域的类型应该是日期。

如果你不想改变fiels的数据类型,那么你必须将字符串转换成日期STR_TO_DATE(ddate,“%D-%间%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之间。

以上是关于MySQL查询显示结果超出范围的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误代码:1264。第 1 行的列 'columnname' 的值超出范围

查询在 MySQL 中有效,但不能通过 Lumen/Laravel - 数值超出范围:1416

SQL Server解惑——为什么你的查询结果超出了查询时间范围

Mysql异常“超出范围”?

python中用find_all查找网页的属性b【0】结果显示超出范围是为啥

ERROR 188 (HY000): FTS 查询超出结果缓存限制 mysql