php - 我有一个返回旧记录的 MySQL 日期格式

标签 php mysql

所以我有点困惑。我的客户选择 10-01-2016($datefrom 变量)和 10-02-2016($dateto 变量)。执行时,它将返回 2015 年和 2016 年的日期。

这是我的 php 代码:

$datefrom = $mysqli->real_escape_string($_GET['datefrom']);

$dateto = $mysqli->real_escape_string($_GET['dateto']);

$query = "SELECT * FROM tbl_Dates WHERE (DATE_FORMAT(date, '%m-%d-%Y') BETWEEN '$datefrom' AND '$dateto') AND date_type='1'";

当我在 MySQL 中运行以下查询时(仅替换变量):

SELECT * FROM tbl_Dates WHERE (DATE_FORMAT(date, '%m-%d-%Y') BETWEEN '10-01-2016' AND '10-02-2016') AND date_type='1';

它运行并提供 2015 年和 2016 年的日期记录。

当我将 DATE_FORMAT 行和变量更改为以下内容时:

SELECT * FROM tbl_Dates WHERE (DATE_FORMAT(date, '%Y-%m-%d') BETWEEN '2016-10-01' AND '2016-10-02') AND date_type='1';

运行良好,仅提供 2016 年日期记录。

该系统已经使用了大约一年,哈哈,这就是为什么它现在给出错误的原因。如何更正 SQL 语法以使其正确查询,而无需更改使用 %d-%m-%Y 格式的 php 代码?

感谢你们提供的任何帮助, 吉姆

最佳答案

由于您的日期不是yyyy-mm-dd 格式,MySQL 会将它们作为STRINGS 进行比较,而不是日期。

这意味着

10-23-2016 > 10-24-2015 

FALSE,因为在字符串比较中34 小。我们人类知道这是一个日期并且知道 2016 年在 2015 年之后,这一事实无关紧要。 MySQL 不是人类,它不是人工智能,当它看到字符串时,它会将它们作为字符串进行比较。

如果您想在 MySQL 中进行“日期数学”,那么您必须使用 native 格式。

关于php - 我有一个返回旧记录的 MySQL 日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39835287/

相关文章:

php - 如何计算多维数组的个数

php - 在 PHP 中创建内联 'Jargon' 帮助程序

mysql - 如何获得每周出现的计数

mysql - 使用哈希时获取行的单个示例的有效方法

php - REGEX 屏蔽除第一个和最后一个字符之外的所有字符

php - 如何检索存储在表中的sql查询并为表中的所有查询创建动态php页面

c# - 如何 POST NULL 值 C#

php - 如何使用复选框在 PHP 中进行多个查询?

php - native 客户端应用程序必须访问 mysql 服务器端数据库

MySQL WhatsApp 聊天查询